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 <[email protected]> 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 "[email protected]" <[email protected]>.
