diff --git a/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java b/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java index 1c015fd82c..1f2210ac78 100644 --- a/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java @@ -206,7 +206,8 @@ protected void update( ModifiedPomXMLEventReader pom ) if ( updatePropertyVersions ) { Map versionProperties = - this.getHelper().getVersionPropertiesMap( getProject(), null, null, null, true ); + this.getHelper().getVersionPropertiesMap( getProject(), null, null, null, + true, true ); List diff = updatePropertyVersions( pom, versionProperties, remoteDepsMap ); propertyDiffs.addAll( diff ); } diff --git a/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java b/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java index 2120aac1cb..d1b8fe724a 100644 --- a/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java @@ -128,6 +128,14 @@ public class DisplayPropertyUpdatesMojo @Parameter( property = "allowIncrementalUpdates", defaultValue = "true" ) private boolean allowIncrementalUpdates; + /** + *

Whether to include property updates from parent.

+ * + * @since 2.14.0 + */ + @Parameter( property = "includeParent", defaultValue = "true" ) + protected boolean includeParent = true; + // -------------------------- STATIC METHODS -------------------------- // -------------------------- OTHER METHODS -------------------------- @@ -151,7 +159,7 @@ public void execute() Map propertyVersions = this.getHelper().getVersionPropertiesMap( getProject(), properties, includeProperties, excludeProperties, - autoLinkItems ); + includeParent, autoLinkItems ); for ( Map.Entry entry : propertyVersions.entrySet() ) { Property property = entry.getKey(); diff --git a/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java b/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java index 3299d0e0ed..94b1bc86ee 100644 --- a/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojo.java @@ -84,6 +84,14 @@ public class PropertyUpdatesReportMojo extends AbstractVersionsReportWhether to include property updates from parent.

+ * + * @since 2.14.0 + */ + @Parameter( property = "includeParent", defaultValue = "true" ) + private boolean includeParent = true; + @Inject protected PropertyUpdatesReportMojo( I18N i18n, RepositorySystem repositorySystem, ArtifactResolver artifactResolver, @@ -121,7 +129,7 @@ protected void doGenerateReport( Locale locale, Sink sink ) try { updateSet.putAll( getHelper().getVersionPropertiesMap( getProject(), properties, includeProperties, - excludeProperties, autoLinkItems ) ); + excludeProperties, includeParent, autoLinkItems ) ); } catch ( MojoExecutionException e ) { diff --git a/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java b/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java index db997e1b09..4210d84086 100644 --- a/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java @@ -304,7 +304,8 @@ private void resolvePropertyRanges( ModifiedPomXMLEventReader pom ) { Map propertyVersions = - this.getHelper().getVersionPropertiesMap( getProject(), null, includeProperties, excludeProperties, true ); + this.getHelper().getVersionPropertiesMap( getProject(), null, includeProperties, excludeProperties, + true, true ); for ( Map.Entry entry : propertyVersions.entrySet() ) { Property property = entry.getKey(); diff --git a/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java b/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java index 6ab5915347..6682dac9e0 100644 --- a/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java @@ -155,7 +155,7 @@ private void update( ModifiedPomXMLEventReader pom, Property[] propertiesConfig, { Map propertyVersions = this.getHelper().getVersionPropertiesMap( getProject(), propertiesConfig, properties, "", - autoLinkItems ); + true, autoLinkItems ); for ( Map.Entry entry : propertyVersions.entrySet() ) { Property currentProperty = entry.getKey(); diff --git a/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java b/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java index 9e20ce0766..c93e8ea952 100644 --- a/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java @@ -160,6 +160,7 @@ protected void update( ModifiedPomXMLEventReader pom ) properties, includeProperties, excludeProperties, + true, autoLinkItems ); for ( Map.Entry entry : propertyVersions.entrySet() ) { diff --git a/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java b/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java index 4e8cecc7e4..524821467b 100644 --- a/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java @@ -159,7 +159,7 @@ protected void update( ModifiedPomXMLEventReader pom ) propertyConfig.setVersion( newVersion ); Map propertyVersions = this.getHelper().getVersionPropertiesMap( getProject(), new Property[] {propertyConfig}, property, "", - autoLinkItems ); + true, autoLinkItems ); for ( Map.Entry entry : propertyVersions.entrySet() ) { Property property = entry.getKey(); diff --git a/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java b/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java index ed959429d8..2189c2b677 100644 --- a/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java +++ b/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java @@ -785,7 +785,9 @@ public ExpressionEvaluator getExpressionEvaluator( MavenProject project ) @Override public Map getVersionPropertiesMap( MavenProject project, Property[] propertyDefinitions, - String includeProperties, String excludeProperties, + String includeProperties, + String excludeProperties, + boolean includeParent, boolean autoLinkItems ) throws MojoExecutionException { @@ -803,7 +805,7 @@ public Map getVersionPropertiesMap( MavenProject pro final PropertyVersionsBuilder[] propertyVersionsBuilders; try { - propertyVersionsBuilders = PomHelper.getPropertyVersionsBuilders( this, project ); + propertyVersionsBuilders = PomHelper.getPropertyVersionsBuilders( this, project, includeParent ); } catch ( ExpressionEvaluationException | IOException e ) { diff --git a/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java b/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java index 40bb3cac08..557f0eac0c 100644 --- a/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java +++ b/src/main/java/org/codehaus/mojo/versions/api/PomHelper.java @@ -72,6 +72,7 @@ import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import static java.util.Collections.singletonMap; import static java.util.stream.IntStream.range; /** @@ -1018,16 +1019,20 @@ private static Map getRawModelWithParents( MavenProject pro * * @param helper Our versions helper. * @param project The project to examine. + * @param includeParent whether parent POMs should be included * @return An array of properties that are associated within the project. * @throws ExpressionEvaluationException if an expression cannot be evaluated. * @throws IOException if the project's pom file cannot be parsed. * @since 1.0-alpha-3 */ - public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHelper helper, MavenProject project ) + public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHelper helper, MavenProject project, + boolean includeParent ) throws ExpressionEvaluationException, IOException { ExpressionEvaluator expressionEvaluator = helper.getExpressionEvaluator( project ); - Map reactorModels = getRawModelWithParents( project ); + Map reactorModels = includeParent + ? getRawModelWithParents( project ) + : singletonMap( project, getRawModel( project ) ); Map propertiesMap = new TreeMap<>(); @@ -1081,7 +1086,9 @@ public static PropertyVersionsBuilder[] getPropertyVersionsBuilders( VersionsHel reactorModels.values().forEach( model -> addProperties( helper, propertiesMap, null, model.getProperties() ) ); - for ( MavenProject currentPrj = project; currentPrj != null; currentPrj = currentPrj.getParent() ) + for ( MavenProject currentPrj = project; currentPrj != null; currentPrj = includeParent + ? currentPrj.getParent() + : null ) { Model model = reactorModels.get( currentPrj ); diff --git a/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java b/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java index 3d57779676..f612c88ac9 100644 --- a/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java +++ b/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java @@ -225,6 +225,7 @@ PluginUpdatesDetails lookupPluginUpdates( Plugin plugin, boolean allowSnapshots * @param propertyDefinitions Any extra hints about properties. * @param includeProperties A comma separated list of properties to include. * @param excludeProperties A comma separated list of properties to exclude. + * @param includeParent whether to include parent POMs * @param autoLinkItems whether to automatically infer associations * @return a map of {@link org.codehaus.mojo.versions.api.PropertyVersions} values keyed by * {@link org.codehaus.mojo.versions.Property} instances. @@ -232,7 +233,7 @@ PluginUpdatesDetails lookupPluginUpdates( Plugin plugin, boolean allowSnapshots */ Map getVersionPropertiesMap( MavenProject project, Property[] propertyDefinitions, String includeProperties, String excludeProperties, - boolean autoLinkItems ) + boolean includeParent, boolean autoLinkItems ) throws MojoExecutionException; /** diff --git a/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java b/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java index be01de3bdf..f306faed95 100644 --- a/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java +++ b/src/test/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojoTest.java @@ -35,6 +35,7 @@ import static org.apache.commons.codec.CharEncoding.UTF_8; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.matchesPattern; +import static org.hamcrest.Matchers.not; /** * Unit tests for {@link DisplayPropertyUpdatesMojo} @@ -85,4 +86,25 @@ public void testPropertiesFromParent() throws Exception assertThat( String.join( "", Files.readAllLines( tempFile ) ), matchesPattern( ".*\\$\\{ver} \\.* 1\\.0\\.0 -> 2\\.0\\.0.*" ) ); } + + @Test + public void testDisablePropertiesFromParent() throws Exception + { + Path tempFile = Files.createTempFile( tempDir, "output", "" ); + + TestUtils.copyDir( Paths.get( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367" ), + tempDir ); + DisplayPropertyUpdatesMojo mojo = + (DisplayPropertyUpdatesMojo) mojoRule.lookupConfiguredMojo( tempDir.resolve( "child" ).toFile(), + "display-property-updates" ); + mojo.outputEncoding = UTF_8; + mojo.outputFile = tempFile.toFile(); + mojo.setPluginContext( new HashMap<>() ); + mojo.artifactMetadataSource = MockUtils.mockArtifactMetadataSource(); + mojo.includeParent = false; + mojo.execute(); + + assertThat( String.join( "", Files.readAllLines( tempFile ) ), + not( matchesPattern( ".*\\$\\{ver} \\.* 1\\.0\\.0 -> 2\\.0\\.0.*" ) ) ); + } } diff --git a/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java b/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java new file mode 100644 index 0000000000..4d498592d4 --- /dev/null +++ b/src/test/java/org/codehaus/mojo/versions/PropertyUpdatesReportMojoTest.java @@ -0,0 +1,98 @@ +package org.codehaus.mojo.versions; +/* + * 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. + */ + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.OutputStream; +import java.util.Locale; + +import org.apache.maven.artifact.metadata.ArtifactMetadataSource; +import org.apache.maven.doxia.module.xhtml5.Xhtml5SinkFactory; +import org.apache.maven.doxia.sink.SinkFactory; +import org.apache.maven.doxia.tools.SiteTool; +import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.apache.maven.plugin.testing.MojoRule; +import org.apache.maven.plugin.testing.stubs.StubArtifactRepository; +import org.junit.Rule; +import org.junit.Test; + +import static org.codehaus.mojo.versions.utils.MockUtils.mockArtifactMetadataSource; +import static org.codehaus.mojo.versions.utils.MockUtils.mockSiteTool; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.not; + +/** + * Unit tests for {@link PropertyUpdatesReportMojo} + */ +public class PropertyUpdatesReportMojoTest extends AbstractMojoTestCase +{ + @Rule + public MojoRule mojoRule = new MojoRule( this ); + private static final ArtifactMetadataSource ARTIFACT_METADATA_SOURCE = mockArtifactMetadataSource(); + private static final SiteTool SITE_TOOL = mockSiteTool(); + private static final StubArtifactRepository LOCAL_REPOSITORY = new StubArtifactRepository( "" ); + + @Test + public void testIncludeParentTrueShouldContainProperty() throws Exception + { + OutputStream os = new ByteArrayOutputStream(); + SinkFactory sinkFactory = new Xhtml5SinkFactory(); + + PropertyUpdatesReportMojo mojo = + (PropertyUpdatesReportMojo) mojoRule.lookupConfiguredMojo( + new File( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367/child" ), + "property-updates-report" ); + setVariableValueToObject( mojo, "localRepository", LOCAL_REPOSITORY ); + setVariableValueToObject( mojo, "siteTool", SITE_TOOL ); + setVariableValueToObject( mojo, "artifactMetadataSource", ARTIFACT_METADATA_SOURCE ); + setVariableValueToObject( mojo, "includeParent", true ); + mojo.generate( sinkFactory.createSink( os ), sinkFactory, Locale.getDefault() ); + + String output = os.toString() + .replaceAll( "<[^>]+>", " " ) + .replaceAll( "&[^;]+;", " " ) + .replaceAll( "\\s+", " " ); + assertThat( output, containsString( "${ver}" ) ); + } + + @Test + public void testIncludeParentFalseShouldNotCountainProperty() throws Exception + { + OutputStream os = new ByteArrayOutputStream(); + SinkFactory sinkFactory = new Xhtml5SinkFactory(); + + PropertyUpdatesReportMojo mojo = + (PropertyUpdatesReportMojo) mojoRule.lookupConfiguredMojo( + new File( "src/test/resources/org/codehaus/mojo/display-property-updates/issue-367/child" ), + "property-updates-report" ); + setVariableValueToObject( mojo, "localRepository", new StubArtifactRepository( "" ) ); + setVariableValueToObject( mojo, "siteTool", SITE_TOOL ); + setVariableValueToObject( mojo, "artifactMetadataSource", ARTIFACT_METADATA_SOURCE ); + setVariableValueToObject( mojo, "includeParent", false ); + mojo.generate( sinkFactory.createSink( os ), sinkFactory, Locale.getDefault() ); + + String output = os.toString() + .replaceAll( "<[^>]+>", " " ) + .replaceAll( "&[^;]+;", " " ) + .replaceAll( "\\s+", " " ); + assertThat( output, not( containsString( "${ver}" ) ) ); + } +} diff --git a/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java b/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java index 89fcc92b49..3e196f8203 100644 --- a/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java +++ b/src/test/java/org/codehaus/mojo/versions/api/DefaultVersionsHelperTest.java @@ -182,7 +182,8 @@ public void testMVERSIONS159ExcludedAndNotIncluded() }; // should not throw an IllegalStateException Map result = - helper.getVersionPropertiesMap( project, propertyDefinitions, "foo.version", "bar.version", false ); + helper.getVersionPropertiesMap( project, propertyDefinitions, "foo.version", "bar.version", + false, false ); assertTrue( result.isEmpty() ); }