You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/07/14 13:39:50 UTC

svn commit: r1690902 - in /sling/trunk/tooling: maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ support/provisioning-model/src/test/java/org/ap...

Author: sseifert
Date: Tue Jul 14 11:39:49 2015
New Revision: 1690902

URL: http://svn.apache.org/r1690902
Log:
SLING-4880 apply resolved dependencies to raw model instead of attaching effective model
add new optional parameter "allowUnresolvedPomDependencies" (default: false)

Added:
    sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java   (with props)
Modified:
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelResolveUtility.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
    sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java
    sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyVariablesTest.java

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java Tue Jul 14 11:39:49 2015
@@ -60,6 +60,13 @@ public abstract class AbstractSlingStart
     @Parameter(defaultValue="false")
     protected boolean usePomDependencies;
         
+    /**
+     * If set to true, an exception is throws when "usePomDependencies" is set to true and some
+     * dependency version could not be resolved in the Maven POM.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean allowUnresolvedPomDependencies;
+        
     protected File getTmpDir() {
         return new File(this.project.getBuild().getDirectory(), "slingstart-tmp");
     }

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java Tue Jul 14 11:39:49 2015
@@ -49,7 +49,7 @@ public class AttachSlingStartModel exten
             model = ModelUtility.applyVariables(model, new PomVariableResolver(project));
         }
         if (usePomDependencies) {
-            // TODO: implement applyDependencies
+            model = ModelUtility.applyArtifactVersions(model, new PomArtifactVersionResolver(project, allowUnresolvedPomDependencies));
         }
 
         // write the model

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java Tue Jul 14 11:39:49 2015
@@ -152,7 +152,8 @@ public class DependencyLifecycleParticip
             resolverOptions.variableResolver(new PomVariableResolver(info.project));
         }
         if (nodeBooleanValue(info.plugin, "usePomDependencies", false)) {
-            resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project));
+            resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project,
+                    nodeBooleanValue(info.plugin, "allowUnresolvedPomDependencies", false)));
         }
 
         // we have to create an effective model to add the dependencies

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java Tue Jul 14 11:39:49 2015
@@ -33,12 +33,15 @@ import org.apache.sling.provisioning.mod
 public class PomArtifactVersionResolver implements ArtifactVersionResolver {
 
     private final MavenProject project;
+    private final boolean allowUnresolvedPomDependencies;
     
     /**
      * @param project Maven project
+     * @param allowUnresolvedPomDependencies If true, no exception is thrown when resolving is not possible
      */
-    public PomArtifactVersionResolver(MavenProject project) {
+    public PomArtifactVersionResolver(MavenProject project, boolean allowUnresolvedPomDependencies) {
         this.project = project;
+        this.allowUnresolvedPomDependencies = allowUnresolvedPomDependencies;
     }
     
     @Override
@@ -53,7 +56,12 @@ public class PomArtifactVersionResolver
                 return version;
             }
         }
-        return null;
+        if (allowUnresolvedPomDependencies) {
+            return null;
+        }
+        else {
+            throw new IllegalArgumentException("Unable to resolve dependency: " + artifact.toMvnUrl());
+        }
     }
     
     private String findVersion(List<Dependency> dependencies, Artifact artifact) {

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java Tue Jul 14 11:39:49 2015
@@ -108,7 +108,7 @@ public class PreparePackageMojo extends
             options.variableResolver(new PomVariableResolver(project));
         }
         if (usePomDependencies) {
-            options.artifactVersionResolver(new PomArtifactVersionResolver(project));
+            options.artifactVersionResolver(new PomArtifactVersionResolver(project, allowUnresolvedPomDependencies));
         }
         return options;
     }

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelResolveUtility.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelResolveUtility.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelResolveUtility.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelResolveUtility.java Tue Jul 14 11:39:49 2015
@@ -90,7 +90,7 @@ class ModelResolveUtility {
      */
     static String resolveArtifactVersion(final String groupId, final String artifactId, final String version,
             final String classifier, final String type, ArtifactVersionResolver artifactVersionResolver) {
-        if (artifactVersionResolver != null && "LATEST".equals(version)) {
+        if (artifactVersionResolver != null && (version == null || "LATEST".equals(version))) {
             String newVersion = artifactVersionResolver.resolve(new Artifact(groupId, artifactId, version, classifier, type));
             if (newVersion != null) {
                 return newVersion;

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java Tue Jul 14 11:39:49 2015
@@ -17,6 +17,7 @@
 package org.apache.sling.provisioning.model;
 
 import static org.apache.sling.provisioning.model.ModelResolveUtility.getProcessedConfiguration;
+import static org.apache.sling.provisioning.model.ModelResolveUtility.resolveArtifactVersion;
 
 import java.util.Arrays;
 import java.util.Enumeration;
@@ -422,19 +423,19 @@ public abstract class ModelUtility {
      * The variable resolver may look up variables on it's own, or fallback to the variables already defined for the feature.
      * All resolved variable values are collected and put to the "variables" section of the resulting model.
      * @param model Original model
-     * @param variableResolver Variable resolver
+     * @param resolver Variable resolver
      * @return Model with updated "variables" section.
      * @throws IllegalArgumentException If a variable can't be replaced or configuration properties can't be parsed
      * @since 1.3
      */
-    public static Model applyVariables(final Model model, final VariableResolver variableResolver) {
+    public static Model applyVariables(final Model model, final VariableResolver resolver) {
         
         // define delegating resolver that collects all variable names and value per feature
         final Map<String,Map<String,String>> collectedVars = new HashMap<String, Map<String,String>>();
         VariableResolver variableCollector = new VariableResolver() {
             @Override
             public String resolve(Feature feature, String name) {
-                String value = variableResolver.resolve(feature, name);
+                String value = resolver.resolve(feature, name);
                 if (value != null) {
                     Map<String,String> featureVars = collectedVars.get(feature.getName());
                     if (featureVars == null) {
@@ -469,4 +470,39 @@ public abstract class ModelUtility {
         return variablesUpdater.process(model);
     }
 
+    /**
+     * Resolves artifact versions that are no set explicitly in the provisioning file via the given resolver (version = "LATEST").
+     * If the resolver does not resolve to a version "LATEST" is left in the model.
+     * The resolver may decide to raise an IllegalArgumentException in this case if unresolved dependencies are no allowed.
+     * @param model Original model
+     * @param resolver Artifact version resolver
+     * @return Model with updated artifact versions
+     * @throws IllegalArgumentException If the provider does not allow unresolved version and a version could not be resolved
+     * @since 1.3
+     */
+    public static Model applyArtifactVersions(final Model model, final ArtifactVersionResolver resolver) {
+        
+        // define a processor that updates the versions of artifacts
+        ModelProcessor versionUpdater = new ModelProcessor() {
+            @Override
+            protected Artifact processArtifact(Artifact artifact, Feature newFeature, RunMode newRunMode) {
+                String newVersion = resolveArtifactVersion(
+                        artifact.getGroupId(),
+                        artifact.getArtifactId(),
+                        artifact.getVersion(),
+                        artifact.getClassifier(),
+                        artifact.getType(),
+                        resolver);
+                return new Artifact(artifact.getGroupId(),
+                        artifact.getArtifactId(),
+                        newVersion,
+                        artifact.getClassifier(),
+                        artifact.getType());
+            }
+        };
+        
+        // return model with updated version artifacts
+        return versionUpdater.process(model);
+    }
+
 }

Modified: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelProcessorTest.java Tue Jul 14 11:39:49 2015
@@ -19,11 +19,9 @@
 package org.apache.sling.provisioning.model;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
 import java.util.Enumeration;
-import java.util.Iterator;
 import java.util.Map.Entry;
 
 import org.junit.Before;
@@ -114,20 +112,9 @@ public class ModelProcessorTest {
         assertEquals("LocRMG11", group12.getLocation());
         assertEquals("ComRMG11", group12.getComment());
         
-        Iterator<Artifact> artifacts = group12.iterator();
-        Artifact artifact1 = artifacts.next();
-        assertEquals("#g1", artifact1.getGroupId());
-        assertEquals("#a1", artifact1.getArtifactId());
-        assertEquals("#v1", artifact1.getVersion());
-        assertEquals("#c1", artifact1.getClassifier());
-        assertEquals("#t1", artifact1.getType());
-
-        Artifact artifact2 = artifacts.next();
-        assertEquals("#g2", artifact2.getGroupId());
-        assertEquals("#a2", artifact2.getArtifactId());
-        assertEquals("#v2", artifact2.getVersion());
-        
-        assertFalse(artifacts.hasNext());
+        U.assertArtifactsInGroup(group12, 2);
+        U.assertArtifact(group12, "mvn:#g1/#a1/#v1/#t1/#c1");
+        U.assertArtifact(group12, "mvn:#g2/#a2/#v2/#jar");
 
         assertEquals("LocConf12", runMode12.getConfigurations().getLocation());
         assertEquals("ComConf12", runMode12.getConfigurations().getComment());
@@ -157,11 +144,8 @@ public class ModelProcessorTest {
         ArtifactGroup group21 = runMode21.getArtifactGroup(20);
         assertNotNull(group21);
         
-        artifacts = group21.iterator();
-        Artifact artifact3 = artifacts.next();
-        assertEquals("#g3", artifact3.getGroupId());
-        assertEquals("#a3", artifact3.getArtifactId());
-        assertFalse(artifacts.hasNext());
+        U.assertArtifactsInGroup(group21, 1);
+        U.assertArtifact(group21, "mvn:#g3/#a3/#LATEST/#jar");
     }
     
     
@@ -179,11 +163,11 @@ public class ModelProcessorTest {
         @Override
         protected Artifact processArtifact(Artifact artifact, Feature feature, RunMode runMode) {
             Artifact newArtifact = new Artifact(
-                    "#" + artifact.getGroupId(),
-                    "#" + artifact.getArtifactId(),
-                    "#" + artifact.getVersion(),
-                    "#" + artifact.getClassifier(),
-                    "#" + artifact.getType());
+                    artifact.getGroupId()!=null ? "#" + artifact.getGroupId() : null,
+                    artifact.getArtifactId()!=null ? "#" + artifact.getArtifactId() : null,
+                    artifact.getVersion()!=null ? "#" + artifact.getVersion() : "#LATEST",
+                    artifact.getClassifier()!=null ? "#" + artifact.getClassifier() : null,
+                    artifact.getType()!=null ? "#" + artifact.getType() : null);
             return newArtifact;
         }
 

Added: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java?rev=1690902&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java Tue Jul 14 11:39:49 2015
@@ -0,0 +1,76 @@
+/*
+ * 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.provisioning.model;
+
+import org.apache.sling.provisioning.model.ModelUtility.ArtifactVersionResolver;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ModelUtilityApplyArtifactVersionsTest {
+
+    private Model testModel;
+    private ArtifactVersionResolver testArtifactVersionResolver;
+    
+    @Before
+    public void setUp() {
+        testModel = new Model();
+        
+        Feature feature = testModel.getOrCreateFeature("feature1");
+        RunMode runMode = feature.getOrCreateRunMode(new String[] { "rm1"});
+        ArtifactGroup group = runMode.getOrCreateArtifactGroup(10);
+        
+        group.add(new Artifact("g1", "a1", "v1", "c1", "t1"));
+        group.add(new Artifact("g2", "a2", "LATEST", null, null));
+        group.add(new Artifact("g3", "a3", "LATEST", null, null));
+        
+        // dummy variable resolver that simulates external resolving of some variables
+        testArtifactVersionResolver = new ArtifactVersionResolver() {
+            @Override
+            public String resolve(Artifact artifact) {
+                if ("g2".equals(artifact.getGroupId()) && "a2".equals(artifact.getArtifactId())) {
+                    return "v2";
+                }
+                return null;
+            }
+        };
+    }
+
+    @Test
+    public void testApplyArtifactVersions() {
+        Model model = ModelUtility.applyArtifactVersions(testModel, testArtifactVersionResolver);
+
+        Feature feature = model.getFeature("feature1");
+        RunMode runMode = feature.getRunMode("rm1");
+        ArtifactGroup group = runMode.getArtifactGroup(10);
+        
+        U.assertArtifactsInGroup(group, 3);
+        U.assertArtifact(group, "mvn:g1/a1/v1/t1/c1");
+        U.assertArtifact(group, "mvn:g2/a2/v2/jar");
+        U.assertArtifact(group, "mvn:g3/a3//jar");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testApplyVariablesInvalidVariable() {
+        ModelUtility.applyArtifactVersions(testModel, new ArtifactVersionResolver() {
+            @Override
+            public String resolve(Artifact artifact) {
+                throw new IllegalArgumentException("Unable to resolve.");
+            }
+        });
+    }
+    
+}

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Tue Jul 14 11:39:49 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyArtifactVersionsTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyVariablesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyVariablesTest.java?rev=1690902&r1=1690901&r2=1690902&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyVariablesTest.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityApplyVariablesTest.java Tue Jul 14 11:39:49 2015
@@ -79,8 +79,9 @@ public class ModelUtilityApplyVariablesT
         RunMode runMode = effectiveFeature.getRunMode("rm1");
         ArtifactGroup group = runMode.getArtifactGroup(10);
         
-        group.add(new Artifact("g1", "a1", "${param1}", "c1", "t1"));
-        group.add(new Artifact("g2", "a2", "${extparam2}", null, null));
+        U.assertArtifactsInGroup(group, 2);
+        U.assertArtifact(group, "mvn:g1/a1/v1/t1/c1");
+        U.assertArtifact(group, "mvn:g2/a2/extvalue2/jar");
         
         Configuration conf = runMode.getConfiguration("pid1", null);
         assertEquals("extvalue1", conf.getProperties().get("conf1"));