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>.