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/13 22:44:40 UTC
svn commit: r1690815 -
/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/
Author: sseifert
Date: Mon Jul 13 20:44:39 2015
New Revision: 1690815
URL: http://svn.apache.org/r1690815
Log:
SLING-4879 Allow to read variables from POM
Added:
sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.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/PreparePackageMojo.java
sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.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=1690815&r1=1690814&r2=1690815&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 Mon Jul 13 20:44:39 2015
@@ -24,6 +24,7 @@ import org.apache.maven.plugins.annotati
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 AbstractSlingStart
@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;
+ }
+ }
+
}
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=1690815&r1=1690814&r2=1690815&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 Mon Jul 13 20:44:39 2015
@@ -43,7 +43,13 @@ public class AttachSlingStartModel exten
@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);
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=1690815&r1=1690814&r2=1690815&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 Mon Jul 13 20:44:39 2015
@@ -46,6 +46,7 @@ import org.apache.sling.provisioning.mod
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 DependencyLifecycleParticip
} 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 DependencyLifecycleParticip
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 DependencyLifecycleParticip
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 DependencyLifecycleParticip
}
}
+ /**
+ * 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)
Added: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java?rev=1690815&view=auto
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java (added)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java Mon Jul 13 20:44:39 2015
@@ -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);
+ }
+
+}
Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Jul 13 20:44:39 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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=1690815&r1=1690814&r2=1690815&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 Mon Jul 13 20:44:39 2015
@@ -91,7 +91,7 @@ public class PreparePackageMojo extends
@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);
Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java Mon Jul 13 20:44:39 2015
@@ -24,6 +24,7 @@ import org.apache.maven.plugin.MojoExecu
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);