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 <[email protected]> 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 "[email protected]" <[email protected]>.
