You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:26:47 UTC
[sling-slingstart-maven-plugin] 06/16: SLING-4880 Allow to get
artifact versions from POM
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag slingstart-maven-plugin-1.3.0
in repository https://gitbox.apache.org/repos/asf/sling-slingstart-maven-plugin.git
commit cfa9a8708cf1686ca4dd87970d28dc82df50fc8e
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Mon Jul 13 22:04:21 2015 +0000
SLING-4880 Allow to get artifact versions from POM
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/tooling/maven/slingstart-maven-plugin@1690829 13f79535-47bb-0310-9956-ffa450edef68
---
.../maven/slingstart/AbstractSlingStartMojo.java | 19 ++++--
.../maven/slingstart/AttachSlingStartModel.java | 2 +-
.../slingstart/DependencyLifecycleParticipant.java | 15 +++--
.../slingstart/PomArtifactVersionResolver.java | 73 ++++++++++++++++++++++
.../sling/maven/slingstart/PreparePackageMojo.java | 2 +-
.../sling/maven/slingstart/ProjectHelper.java | 6 +-
6 files changed, 101 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
index 53ab9d4..08812ae 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
@@ -24,7 +24,7 @@ import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
-import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
+import org.apache.sling.provisioning.model.ModelUtility.ResolverOptions;
/**
* Base class for all slingstart mojos.
@@ -53,6 +53,13 @@ public abstract class AbstractSlingStartMojo extends AbstractMojo {
protected boolean usePomVariables;
/**
+ * If set to true, Artifact dependencies from provisioning file without explict version are tried
+ * to be resolved against the dependency versions from the Maven POM.
+ */
+ @Parameter(defaultValue="false")
+ protected boolean usePomDependencies;
+
+ /**
* If set to true, the effective provisioning models with all variables replaced is attached instead of the raw model.
*/
@Parameter(defaultValue="false")
@@ -65,13 +72,15 @@ public abstract class AbstractSlingStartMojo extends AbstractMojo {
/**
* @return Variable to be used when building an effective provisioning model.
*/
- protected VariableResolver getVariableResolver() {
+ protected ResolverOptions getResolverOptions() {
+ ResolverOptions options = new ResolverOptions();
if (usePomVariables) {
- return new PomVariableResolver(project);
+ options.variableResolver(new PomVariableResolver(project));
}
- else {
- return null;
+ if (usePomDependencies) {
+ options.artifactVersionResolver(new PomArtifactVersionResolver(project));
}
+ return options;
}
}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
index 2b47234..b336791 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
@@ -45,7 +45,7 @@ public class AttachSlingStartModel extends AbstractSlingStartMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
final Model model;
if (attachEffectiveModel) {
- model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
+ model = ProjectHelper.getEffectiveModel(this.project, getResolverOptions());
}
else {
model = ProjectHelper.getRawModel(this.project);
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index a9f225f..0e58a18 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -44,9 +44,9 @@ import org.apache.sling.provisioning.model.Feature;
import org.apache.sling.provisioning.model.Model;
import org.apache.sling.provisioning.model.ModelConstants;
import org.apache.sling.provisioning.model.ModelUtility;
+import org.apache.sling.provisioning.model.ModelUtility.ResolverOptions;
import org.apache.sling.provisioning.model.RunMode;
import org.apache.sling.provisioning.model.Traceable;
-import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
import org.apache.sling.provisioning.model.io.ModelReader;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
@@ -146,14 +146,17 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
throw new MavenExecutionException(ioe.getMessage(), ioe);
}
- // prepare variable resolver
- VariableResolver variableResolver = null;
+ // prepare resolver options
+ ResolverOptions resolverOptions = new ResolverOptions();
if (nodeBooleanValue(info.plugin, "usePomVariables", false)) {
- variableResolver = new PomVariableResolver(info.project);
+ resolverOptions.variableResolver(new PomVariableResolver(info.project));
+ }
+ if (nodeBooleanValue(info.plugin, "usePomDependencies", false)) {
+ resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project));
}
// we have to create an effective model to add the dependencies
- final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, variableResolver);
+ final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, resolverOptions);
final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
info.model = new Model();
@@ -161,7 +164,7 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
ModelUtility.merge(info.model, d);
}
ModelUtility.merge(info.model, effectiveModel);
- info.model = ModelUtility.getEffectiveModel(info.model, variableResolver);
+ info.model = ModelUtility.getEffectiveModel(info.model, resolverOptions);
final Map<Traceable, String> errors = ModelUtility.validate(info.model);
if ( errors != null ) {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java b/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
new file mode 100644
index 0000000..0208310
--- /dev/null
+++ b/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.maven.slingstart;
+
+import java.util.List;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.utils.StringUtils;
+import org.apache.sling.provisioning.model.Artifact;
+import org.apache.sling.provisioning.model.ModelUtility.ArtifactVersionResolver;
+
+/**
+ * Provisioning artifact resolver that tries to resolve artifacts in provisioning file without version (LATEST)
+ * against the dependencies defined in the maven project.
+ */
+public class PomArtifactVersionResolver implements ArtifactVersionResolver {
+
+ private final MavenProject project;
+
+ /**
+ * @param project Maven project
+ */
+ public PomArtifactVersionResolver(MavenProject project) {
+ this.project = project;
+ }
+
+ @Override
+ public String resolve(Artifact artifact) {
+ String version = findVersion(project.getDependencies(), artifact);
+ if (version != null) {
+ return version;
+ }
+ version = findVersion(project.getDependencyManagement().getDependencies(), artifact);
+ if (version != null) {
+ return version;
+ }
+ return null;
+ }
+
+ private String findVersion(List<Dependency> dependencies, Artifact artifact) {
+ for (Dependency dependency : project.getDependencyManagement().getDependencies()) {
+ if (artifactEquals(dependency, artifact)) {
+ return dependency.getVersion();
+ }
+ }
+ return null;
+ }
+
+ private boolean artifactEquals(Dependency dependency, Artifact artifact) {
+ return StringUtils.equals(dependency.getGroupId(), artifact.getGroupId())
+ && StringUtils.equals(dependency.getArtifactId(), artifact.getArtifactId())
+ && StringUtils.equals(dependency.getClassifier(), artifact.getClassifier())
+ && StringUtils.equals(dependency.getType(), artifact.getType());
+ }
+
+}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
index 3ceae28..11b372e 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
@@ -91,7 +91,7 @@ public class PreparePackageMojo extends AbstractSlingStartMojo {
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- final Model model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
+ final Model model = ProjectHelper.getEffectiveModel(this.project, getResolverOptions());
this.prepareGlobal(model);
this.prepareStandaloneApp(model);
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java b/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
index aabb753..af6785c 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
@@ -24,7 +24,7 @@ import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.sling.provisioning.model.Model;
import org.apache.sling.provisioning.model.ModelUtility;
-import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
+import org.apache.sling.provisioning.model.ModelUtility.ResolverOptions;
import org.apache.sling.provisioning.model.io.ModelReader;
import org.apache.sling.provisioning.model.io.ModelWriter;
@@ -60,14 +60,14 @@ public abstract class ProjectHelper {
* @return The effective model
* @throws MojoExecutionException If reading fails
*/
- public static Model getEffectiveModel(final MavenProject project, VariableResolver variableResolver)
+ public static Model getEffectiveModel(final MavenProject project, ResolverOptions resolverOptions)
throws MojoExecutionException {
Model result = (Model) project.getContextValue(EFFECTIVE_MODEL_CACHE);
if ( result == null ) {
try {
final StringReader r = new StringReader((String)project.getContextValue(EFFECTIVE_MODEL_TXT));
result = ModelReader.read(r, project.getId());
- result = ModelUtility.getEffectiveModel(result, variableResolver);
+ result = ModelUtility.getEffectiveModel(result, resolverOptions);
project.setContextValue(EFFECTIVE_MODEL_CACHE, result);
} catch ( final IOException ioe) {
throw new MojoExecutionException(ioe.getMessage(), ioe);
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.