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