From 35450afc30192912688a60947a3f2f060809317c Mon Sep 17 00:00:00 2001 From: Torsten Kruse Date: Thu, 27 Oct 2022 10:45:04 +0200 Subject: [PATCH] fix issue also for display-dependency-updates --- .../versions/DependencyUpdatesReportMojo.java | 12 +---- .../DisplayDependencyUpdatesMojo.java | 1 + .../versions/api/DefaultVersionsHelper.java | 18 ++++++++ .../mojo/versions/api/VersionsHelper.java | 10 ++++ .../DisplayDependencyUpdatesMojoTest.java | 30 ++++++++++++ .../version-interpolation/pom.xml | 46 +++++++++++++++++++ 6 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 src/test/resources/org/codehaus/mojo/display-dependency-updates/version-interpolation/pom.xml diff --git a/src/main/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojo.java b/src/main/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojo.java index b5a3bb0279..f7c1a30c99 100644 --- a/src/main/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/DependencyUpdatesReportMojo.java @@ -174,17 +174,7 @@ && getProject().getOriginalModel().getDependencyManagement().getDependencies() ! // TODO: I'm not 100% sure if this will work correctly in all cases. for ( Dependency dep : getProject().getOriginalModel().getDependencyManagement().getDependencies() ) { - // resolve version from model properties if necessary (e.g. "${mycomponent.myversion}" - if ( dep.getVersion().startsWith( "${" ) ) - { - final String resolvedVersion = getProject().getOriginalModel() - .getProperties().getProperty( - dep.getVersion().substring( 2, dep.getVersion().length() - 1 ) ); - if ( resolvedVersion != null && !resolvedVersion.isEmpty() ) - { - dep.setVersion( resolvedVersion ); - } - } + dep = getHelper().interpolateVersion( dep, getProject() ); getLog().debug( "Original Dpmg: " + dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getVersion() + ":" + dep.getType() + ":" + dep.getScope() ); diff --git a/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java b/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java index 0c8c23d91a..cc5f208c87 100644 --- a/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java @@ -535,6 +535,7 @@ public void execute() } else { + dependency = getHelper().interpolateVersion( dependency, getProject() ); dependencyManagement.add( dependency ); } } 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..d10caa2749 100644 --- a/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java +++ b/src/main/java/org/codehaus/mojo/versions/api/DefaultVersionsHelper.java @@ -895,6 +895,24 @@ else if ( !excludePropertiesList.isEmpty() && excludePropertiesList.contains( pr return propertyVersions; } + @Override + public Dependency interpolateVersion( final Dependency dependency, final MavenProject project ) + { + + // resolve version from model properties if necessary (e.g. "${mycomponent.myversion}" + if ( dependency.getVersion().startsWith( "${" ) ) + { + final String resolvedVersion = project.getOriginalModel() + .getProperties().getProperty( + dependency.getVersion().substring( 2, dependency.getVersion().length() - 1 ) ); + if ( resolvedVersion != null && !resolvedVersion.isEmpty() ) + { + dependency.setVersion( resolvedVersion ); + } + } + return dependency; + } + private List getSplitProperties( String commaSeparatedProperties ) { List propertiesList = Collections.emptyList(); 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..8d363c8556 100644 --- a/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java +++ b/src/main/java/org/codehaus/mojo/versions/api/VersionsHelper.java @@ -246,4 +246,14 @@ Map getVersionPropertiesMap( MavenProject project, P */ void resolveArtifact( Artifact artifact, boolean usePluginRepositories ) throws ArtifactResolutionException, ArtifactNotFoundException; + + /** + * Attempts to interpolate the version from model properties. + * + * @param dependency the dependency + * @param project the maven project + * @return the dependency with interpolated property (as far as possible) + * @since 2.14.0 + */ + Dependency interpolateVersion( Dependency dependency, MavenProject project ); } diff --git a/src/test/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojoTest.java b/src/test/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojoTest.java index 6fe8c5b82d..1cba60d885 100644 --- a/src/test/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojoTest.java +++ b/src/test/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojoTest.java @@ -230,4 +230,34 @@ null, mockArtifactMetadataSource( new HashMap() } } } + + @Test + public void testVersionInterpolation() throws Exception + { + File outputFile = null; + try + { + outputFile = File.createTempFile( "display-dependency-updates", "" ); + assert outputFile.exists(); + + DisplayDependencyUpdatesMojo mojo = (DisplayDependencyUpdatesMojo) mojoRule.lookupConfiguredMojo( + new File( "target/test-classes/org/codehaus/mojo/display-dependency-updates/version-interpolation" ), + "display-dependency-updates" ); + + // This is just an example of how to create it-style tests as unit tests; the advantage is easier debugging + mojo.outputFile = outputFile; + mojo.artifactMetadataSource = mockArtifactMetadataSource( new HashMap() + {{ + put( "dummy-api", new String[] { "2.0.1" } ); + }} ); + setVariableValueToObject( mojo, "processDependencyManagementTransitive", false ); + mojo.execute(); + List output = Files.readAllLines( outputFile.toPath(), UTF_8 ); + assertThat( output, not( hasItem( containsString( "mycomponent.version" ) ) ) ); + } + finally + { + assert outputFile == null || !outputFile.exists() || outputFile.delete(); + } + } } diff --git a/src/test/resources/org/codehaus/mojo/display-dependency-updates/version-interpolation/pom.xml b/src/test/resources/org/codehaus/mojo/display-dependency-updates/version-interpolation/pom.xml new file mode 100644 index 0000000000..ee3f2eb629 --- /dev/null +++ b/src/test/resources/org/codehaus/mojo/display-dependency-updates/version-interpolation/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + default-group + default-artifact + 1.0 + pom + + + 1.2.3 + + + + + + localhost + dummy-api + "${mycomponent.version}" + + + + + + + localhost + dummy-api + + + + + + + org.codehaus.mojo + versions-maven-plugin + ${project.version} + + display-dependency-updates + + + + + + + + +