diff --git a/src/it-repo/dummy-api-impl-bom-pom-1.0.pom b/src/it-repo/dummy-api-impl-bom-pom-1.0.pom new file mode 100644 index 000000000..b46e97d9e --- /dev/null +++ b/src/it-repo/dummy-api-impl-bom-pom-1.0.pom @@ -0,0 +1,25 @@ + + 4.0.0 + + localhost + dummy-api-impl-bom-pom + 1.0 + pom + + + + + localhost + dummy-api + 1.1 + + + localhost + dummy-impl + 1.2 + + + + + diff --git a/src/it-repo/dummy-api-impl-bom-pom-2.0.pom b/src/it-repo/dummy-api-impl-bom-pom-2.0.pom new file mode 100644 index 000000000..b078dabc4 --- /dev/null +++ b/src/it-repo/dummy-api-impl-bom-pom-2.0.pom @@ -0,0 +1,25 @@ + + 4.0.0 + + localhost + dummy-api-impl-bom-pom + 2.0 + pom + + + + + localhost + dummy-api + 2.0 + + + localhost + dummy-impl + 2.1 + + + + + diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/invoker.properties b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/invoker.properties new file mode 100644 index 000000000..e4813a916 --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/invoker.properties @@ -0,0 +1,2 @@ +invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:display-dependency-updates +invoker.mavenOpts=-DprocessDependencyManagementTransitive=false diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/pom.xml b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/pom.xml new file mode 100644 index 000000000..d22ccbd93 --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/pom.xml @@ -0,0 +1,58 @@ + + 4.0.0 + localhost + it-display-dependency-updates-001 + 1.0 + pom + display-dependency-updates + http://localhost/ + + + localhost + dummy-api + + + + + + localhost + dummy-api-impl-bom-pom + 1.0 + pom + import + + + + + + + + localhost + dummy-maven-plugin + 1.0 + + + maven-clean-plugin + 2.2 + + + maven-deploy-plugin + 2.3 + + + maven-install-plugin + 2.2 + + + maven-site-plugin + 2.0 + + + maven-project-info-reports-plugin + 2.1 + + + + + diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/verify.bsh b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/verify.bsh new file mode 100644 index 000000000..c44a94c01 --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-false/verify.bsh @@ -0,0 +1,45 @@ +import java.io.*; +import org.codehaus.plexus.util.FileUtils; +import java.util.regex.*; + +try +{ + File file = new File( basedir, "build.log" ); + String buf = FileUtils.fileRead( file ); + + Pattern p; + Matcher m; + + p = Pattern.compile( "\\Qlocalhost:dummy-api\\E\\s*\\.*\\s*1\\.1\\s+->\\s+3\\.0" ); + m = p.matcher( buf.toString() ); + if ( !m.find() ) + { + System.out.println( "Did not suggest updating dummy-api to version 3.0" ); + return false; + } + System.out.println( m.group( 0 ) ); + + p = Pattern.compile( "\\Qlocalhost:dummy-impl\\E\\s*\\.*\\s*1\\.2\\s+->\\s+2\\.2" ); + m = p.matcher( buf.toString() ); + if ( m.find() ) + { + System.out.println( "Did suggest updating dummy-impl to version 2.2" ); + return false; + } + + p = Pattern.compile( "\\Qlocalhost:dummy-api-impl-bom-pom\\E\\s*\\.*\\s*1\\.0\\s+->\\s+2\\.0" ); + m = p.matcher( buf.toString() ); + if ( !m.find() ) + { + System.out.println( "Did not suggest updating dummy-api-impl-bom-pom to version 2.0" ); + return false; + } + System.out.println( m.group( 0 ) ); +} +catch( Throwable t ) +{ + t.printStackTrace(); + return false; +} + +return true; diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/invoker.properties b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/invoker.properties new file mode 100644 index 000000000..fa969d852 --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/invoker.properties @@ -0,0 +1,2 @@ +invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:display-dependency-updates +invoker.mavenOpts=-DprocessDependencyManagementTransitive=true diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/pom.xml b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/pom.xml new file mode 100644 index 000000000..d22ccbd93 --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/pom.xml @@ -0,0 +1,58 @@ + + 4.0.0 + localhost + it-display-dependency-updates-001 + 1.0 + pom + display-dependency-updates + http://localhost/ + + + localhost + dummy-api + + + + + + localhost + dummy-api-impl-bom-pom + 1.0 + pom + import + + + + + + + + localhost + dummy-maven-plugin + 1.0 + + + maven-clean-plugin + 2.2 + + + maven-deploy-plugin + 2.3 + + + maven-install-plugin + 2.2 + + + maven-site-plugin + 2.0 + + + maven-project-info-reports-plugin + 2.1 + + + + + diff --git a/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/verify.bsh b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/verify.bsh new file mode 100644 index 000000000..7aaf3d73b --- /dev/null +++ b/src/it/it-display-dependency-updates-009-processDependencyManagementTransitive-true/verify.bsh @@ -0,0 +1,45 @@ +import java.io.*; +import org.codehaus.plexus.util.FileUtils; +import java.util.regex.*; + +try +{ + File file = new File( basedir, "build.log" ); + String buf = FileUtils.fileRead( file ); + + Pattern p; + Matcher m; + + p = Pattern.compile( "\\Qlocalhost:dummy-api\\E\\s*\\.*\\s*1\\.1\\s+->\\s+3\\.0" ); + m = p.matcher( buf.toString() ); + if ( !m.find() ) + { + System.out.println( "Did not suggest updating dummy-api to version 3.0" ); + return false; + } + System.out.println( m.group( 0 ) ); + + p = Pattern.compile( "\\Qlocalhost:dummy-impl\\E\\s*\\.*\\s*1\\.2\\s+->\\s+2\\.2" ); + m = p.matcher( buf.toString() ); + if ( !m.find() ) + { + System.out.println( "Did not suggest updating dummy-impl to version 2.2" ); + return false; + } + System.out.println( m.group( 0 ) ); + + p = Pattern.compile( "\\Qlocalhost:dummy-api-impl-bom-pom\\E\\s*\\.*\\s*1\\.0\\s+->\\s+2\\.0" ); + m = p.matcher( buf.toString() ); + if ( m.find() ) + { + System.out.println( "Did suggest updating dummy-api-impl-bom-pom to version 2.0" ); + return false; + } +} +catch( Throwable t ) +{ + t.printStackTrace(); + return false; +} + +return true; diff --git a/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java b/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java index 34c4c6474..c5ca6344c 100644 --- a/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java +++ b/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java @@ -25,11 +25,13 @@ import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; +import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; import org.codehaus.mojo.versions.api.ArtifactVersions; import org.codehaus.mojo.versions.api.UpdateScope; import org.codehaus.mojo.versions.rewriting.ModifiedPomXMLEventReader; @@ -76,6 +78,19 @@ public class DisplayDependencyUpdatesMojo @Parameter( property = "processDependencyManagement", defaultValue = "true" ) private boolean processDependencyManagement; + /** + * Whether to process the depdendencyManagement part transitive or not. + * In case of <type>pom</type>and + * <scope>import</scope> this means + * by default to report also the imported dependencies. + * If processTransitive is set to false the report will only show + * updates of the imported pom it self. + * + * @since 2.11 + */ + @Parameter( property = "processDependencyManagementTransitive", defaultValue = "true" ) + private boolean processDependencyManagementTransitive; + /** * Whether to process the dependencies section of the project. * @@ -283,10 +298,11 @@ public void execute() logInit(); Set dependencyManagement = new TreeSet<>( new DependencyComparator() ); - if ( getProject().getDependencyManagement() != null ) + DependencyManagement projectDependencyManagement = getProjectDependencyManagement(getProject()); + if ( projectDependencyManagement != null ) { - List dependenciesFromPom = getProject().getDependencyManagement().getDependencies(); + List dependenciesFromPom = projectDependencyManagement.getDependencies(); for ( Dependency dependency : dependenciesFromPom ) { getLog().debug( "dependency from pom: " + dependency.getGroupId() + ":" + dependency.getArtifactId() @@ -297,10 +313,10 @@ public void execute() if ( getProject().hasParent() ) { getLog().debug( "Reading parent dependencyManagement information" ); - if ( getProject().getParent().getDependencyManagement() != null ) + DependencyManagement parentProjectDependencyManagement = getProjectDependencyManagement(getProject().getParent()); + if ( parentProjectDependencyManagement != null ) { - List parentDeps = - getProject().getParent().getDependencyManagement().getDependencies(); + List parentDeps = parentProjectDependencyManagement.getDependencies(); for ( Dependency parentDep : parentDeps ) { // only groupId && artifactId needed cause version is null @@ -378,6 +394,15 @@ public void execute() } } + private DependencyManagement getProjectDependencyManagement(MavenProject project) { + if (processDependencyManagementTransitive) { + return project.getDependencyManagement(); + } + else { + return project.getOriginalModel().getDependencyManagement(); + } + } + private UpdateScope calculateUpdateScope() { UpdateScope result = UpdateScope.ANY;