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:46 UTC

[sling-slingstart-maven-plugin] 05/16: SLING-4879 Allow to read variables 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 72dfaf3e1ce96fa4981b000cb1ac4ffe079b9104
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Mon Jul 13 20:44:39 2015 +0000

    SLING-4879 Allow to read variables from POM
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/tooling/maven/slingstart-maven-plugin@1690815 13f79535-47bb-0310-9956-ffa450edef68
---
 .../maven/slingstart/AbstractSlingStartMojo.java   | 26 ++++++++++++
 .../maven/slingstart/AttachSlingStartModel.java    |  8 +++-
 .../slingstart/DependencyLifecycleParticipant.java | 30 ++++++++++++-
 .../maven/slingstart/PomVariableResolver.java      | 49 ++++++++++++++++++++++
 .../sling/maven/slingstart/PreparePackageMojo.java |  2 +-
 .../sling/maven/slingstart/ProjectHelper.java      |  5 ++-
 6 files changed, 114 insertions(+), 6 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 f2024f8..53ab9d4 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
@@ -24,6 +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;
 
 /**
  * Base class for all slingstart mojos.
@@ -45,7 +46,32 @@ public abstract class AbstractSlingStartMojo extends AbstractMojo {
     @Parameter(defaultValue="false")
     protected boolean createWebapp;
 
+    /**
+     * If set to true, properties from the Maven POM can be used as variables in the provisioning files.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean usePomVariables;
+        
+    /**
+     * If set to true, the effective provisioning models with all variables replaced is attached instead of the raw model.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean attachEffectiveModel;
+        
     protected File getTmpDir() {
         return new File(this.project.getBuild().getDirectory(), "slingstart-tmp");
     }
+    
+    /**
+     * @return Variable to be used when building an effective provisioning model.
+     */
+    protected VariableResolver getVariableResolver() {
+        if (usePomVariables) {
+            return new PomVariableResolver(project);
+        }
+        else {
+            return null;
+        }
+    }
+    
 }
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 acfc7ed..2b47234 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
@@ -43,7 +43,13 @@ public class AttachSlingStartModel extends AbstractSlingStartMojo {
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        final Model model = ProjectHelper.getRawModel(this.project);
+        final Model model;
+        if (attachEffectiveModel) {
+            model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
+        }
+        else {
+            model = ProjectHelper.getRawModel(this.project);
+        }
 
         // write the model
         final File outputFile = new File(this.project.getBuild().getDirectory() + File.separatorChar + BuildConstants.MODEL_ARTIFACT_NAME);
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 4983ccc..a9f225f 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -46,6 +46,7 @@ import org.apache.sling.provisioning.model.ModelConstants;
 import org.apache.sling.provisioning.model.ModelUtility;
 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;
@@ -144,9 +145,15 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
         } catch ( final IOException ioe) {
             throw new MavenExecutionException(ioe.getMessage(), ioe);
         }
+        
+        // prepare variable resolver
+        VariableResolver variableResolver = null;
+        if (nodeBooleanValue(info.plugin, "usePomVariables", false)) {
+            variableResolver = new PomVariableResolver(info.project);
+        }
 
         // we have to create an effective model to add the dependencies
-        final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, null);
+        final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, variableResolver);
 
         final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
         info.model = new Model();
@@ -154,7 +161,7 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
             ModelUtility.merge(info.model, d);
         }
         ModelUtility.merge(info.model, effectiveModel);
-        info.model = ModelUtility.getEffectiveModel(info.model, null);
+        info.model = ModelUtility.getEffectiveModel(info.model, variableResolver);
 
         final Map<Traceable, String> errors = ModelUtility.validate(info.model);
         if ( errors != null ) {
@@ -315,6 +322,13 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
         return dependencies;
     }
 
+    /**
+     * Gets plugins configuration from POM (string parameter).
+     * @param plugin Plugin
+     * @param name Configuration parameter.
+     * @param defaultValue Default value that is returned if parameter is not set
+     * @return Parameter value or default value.
+     */
     private static String nodeValue(final Plugin plugin, final String name, final String defaultValue) {
         final Xpp3Dom config = plugin == null ? null : (Xpp3Dom)plugin.getConfiguration();
         final Xpp3Dom node = (config == null ? null : config.getChild(name));
@@ -325,6 +339,18 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
         }
     }
 
+    /**
+     * Gets plugins configuration from POM (boolean parameter).
+     * @param plugin Plugin
+     * @param name Configuration parameter.
+     * @param defaultValue Default value that is returned if parameter is not set
+     * @return Parameter value or default value.
+     */
+    private static boolean nodeBooleanValue(final Plugin plugin, final String name, final boolean defaultValue) {
+        String booleanValue = nodeValue(plugin, name, Boolean.toString(defaultValue));
+        return "true".equals(booleanValue.toLowerCase());
+    }
+
     private static File resolveSlingstartArtifact(final Environment env,
             final MavenProject project,
             final Dependency d)
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java b/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
new file mode 100644
index 0000000..6c0e268
--- /dev/null
+++ b/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.maven.project.MavenProject;
+import org.apache.sling.provisioning.model.Feature;
+import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
+
+/**
+ * Provisioning variable resolver that supports setting or overriding variables via POM properties.
+ * Properties in POM have higher precedence than variables defined in the provisioning file.
+ */
+public class PomVariableResolver implements VariableResolver {
+    
+    private final MavenProject project;
+    
+    /**
+     * @param project Maven project
+     */
+    public PomVariableResolver(MavenProject project) {
+        this.project = project;
+    }
+
+    @Override
+    public String resolve(Feature feature, String name) {
+        Object pomValue = project.getProperties().get(name);
+        if (pomValue != null) {
+            return pomValue.toString();
+        }
+        return feature.getVariables().get(name);
+    }
+    
+}
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 6e0a5b3..3ceae28 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);
+        final Model model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
 
         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 bf13b00..aabb753 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
@@ -24,6 +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.io.ModelReader;
 import org.apache.sling.provisioning.model.io.ModelWriter;
 
@@ -59,14 +60,14 @@ public abstract class ProjectHelper {
      * @return The effective model
      * @throws MojoExecutionException If reading fails
      */
-    public static Model getEffectiveModel(final MavenProject project)
+    public static Model getEffectiveModel(final MavenProject project, VariableResolver variableResolver)
     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, null);
+                result = ModelUtility.getEffectiveModel(result, variableResolver);
                 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>.