From bdd09969d3719b18875ab0f2078baec48c5154b2 Mon Sep 17 00:00:00 2001 From: Michael Simacek Date: Sun, 7 Jun 2020 20:41:17 +0200 Subject: [PATCH 1/4] Port to current maven-dependency-tree --- pom.xml | 2 +- .../felix/bundleplugin/BundleAllPlugin.java | 54 ++++++++++--------- .../felix/bundleplugin/BundlePlugin.java | 30 +++++++---- 3 files changed, 49 insertions(+), 37 deletions(-) diff --git a/pom.xml b/pom.xml index 8f017c6..284f909 100644 --- a/pom.xml +++ b/pom.xml @@ -212,7 +212,7 @@ org.apache.maven.shared maven-dependency-tree - 2.1 + 3.0 org.codehaus.plexus diff --git a/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java index 8c7b254..8f38eee 100644 --- a/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java +++ b/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java @@ -21,8 +21,10 @@ package org.apache.felix.bundleplugin; import java.io.File; import java.io.FilenameFilter; +import java.util.ArrayDeque; import java.util.Arrays; import java.util.Collection; +import java.util.Deque; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; @@ -37,7 +39,6 @@ import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactCollector; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; @@ -48,13 +49,14 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.project.artifact.InvalidDependencyVersionException; -import org.apache.maven.shared.dependency.tree.DependencyNode; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; import org.codehaus.plexus.util.FileUtils; import aQute.bnd.osgi.Analyzer; @@ -91,24 +93,18 @@ public class BundleAllPlugin extends ManifestPlugin */ @Parameter( property = "wrapImportPackage", defaultValue = "*" ) private String wrapImportPackage; - @Component private ArtifactFactory m_factory; @Component private ArtifactMetadataSource m_artifactMetadataSource; - @Component - private ArtifactCollector m_collector; - /** * Artifact resolver, needed to download jars. */ @Component private ArtifactResolver m_artifactResolver; - @Component - private DependencyTreeBuilder m_dependencyTreeBuilder; @Component private MavenProjectBuilder m_mavenProjectBuilder; @@ -179,17 +175,19 @@ public class BundleAllPlugin extends ManifestPlugin try { - dependencyTree = m_dependencyTreeBuilder.buildDependencyTree( project, localRepository, m_factory, - m_artifactMetadataSource, null, m_collector ); + ProjectBuildingRequest request = new DefaultProjectBuildingRequest(); + request.setProject(getProject()); + request.setRepositorySession(session.getRepositorySession()); + dependencyTree = m_dependencyGraphBuilder.buildDependencyGraph(request, null); } - catch ( DependencyTreeBuilderException e ) + catch ( DependencyGraphBuilderException e ) { throw new MojoExecutionException( "Unable to build dependency tree", e ); } BundleInfo bundleInfo = new BundleInfo(); - if ( !dependencyTree.hasChildren() ) + if ( dependencyTree.getChildren().isEmpty()) { /* no need to traverse the tree */ return bundleRoot( project, bundleInfo ); @@ -197,20 +195,27 @@ public class BundleAllPlugin extends ManifestPlugin getLog().debug( "Will bundle the following dependency tree" + LS + dependencyTree ); - for ( Iterator it = dependencyTree.inverseIterator(); it.hasNext(); ) + Deque stack = new ArrayDeque(); + stack.push(dependencyTree); + Set visited = new HashSet(); + while (!stack.isEmpty()) { - DependencyNode node = ( DependencyNode ) it.next(); - if ( !it.hasNext() ) + DependencyNode node = stack.pop(); + if (visited.contains(node)) { - /* this is the root, current project */ - break; + continue; } - - if ( node.getState() != DependencyNode.INCLUDED ) + visited.add(node); + if (node.getChildren() != null) { - continue; + stack.addAll(node.getChildren()); } + //if ( node.getState() != DependencyNode.INCLUDED ) + //{ + // continue; + //} + if ( Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) ) { getLog().debug( "Ignoring system scoped artifact " + node.getArtifact() ); @@ -234,12 +239,11 @@ public class BundleAllPlugin extends ManifestPlugin node.getArtifact().setFile( artifact.getFile() ); - int nodeDepth = node.getDepth(); - if ( nodeDepth > maxDepth ) + if ( stack.size() > maxDepth ) { /* node is deeper than we want */ getLog().debug( - "Ignoring " + node.getArtifact() + ", depth is " + nodeDepth + ", bigger than " + maxDepth ); + "Ignoring " + node.getArtifact() + ", depth is " + stack.size() + ", bigger than " + maxDepth ); continue; } diff --git a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java index c07637a..7844ead 100644 --- a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java +++ b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java @@ -73,12 +73,15 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.MavenProjectHelper; import org.apache.maven.project.ProjectBuildingException; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; -import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; import org.apache.maven.shared.osgi.DefaultMaven2OsgiConverter; import org.apache.maven.shared.osgi.Maven2OsgiConverter; import org.codehaus.plexus.archiver.UnArchiver; @@ -209,6 +212,9 @@ public class BundlePlugin extends AbstractMojo @Component private ArtifactHandlerManager m_artifactHandlerManager; + @Component + protected DependencyGraphBuilder m_dependencyGraphBuilder; + /* The current Maven session. */ @Parameter( defaultValue = "${session}", readonly = true ) protected MavenSession session; @@ -221,7 +227,7 @@ public class BundlePlugin extends AbstractMojo protected MavenProjectBuilder mavenProjectBuilder; @Component - private DependencyTreeBuilder dependencyTreeBuilder; + private DependencyGraphBuilder dependencyGraphBuilder; @Component private ArtifactMetadataSource artifactMetadataSource; @@ -737,7 +743,7 @@ public class BundlePlugin extends AbstractMojo // We need to find the direct dependencies that have been included in the uber JAR so that we can modify the // POM accordingly. private void createDependencyReducedPom( Set artifactsToRemove ) - throws IOException, ProjectBuildingException, DependencyTreeBuilderException { + throws IOException, ProjectBuildingException, DependencyGraphBuilderException { Model model = project.getOriginalModel(); List dependencies = new ArrayList(); @@ -875,20 +881,22 @@ public class BundlePlugin extends AbstractMojo } public boolean updateExcludesInDeps( MavenProject project, List dependencies, List transitiveDeps ) - throws DependencyTreeBuilderException + throws DependencyGraphBuilderException { - org.apache.maven.shared.dependency.tree.DependencyNode node = dependencyTreeBuilder.buildDependencyTree(project, localRepository, artifactFactory, - artifactMetadataSource, null, - artifactCollector); + ProjectBuildingRequest request = new DefaultProjectBuildingRequest(); + request.setProject(project); + request.setRepositorySession(session.getRepositorySession()); + DependencyNode node = dependencyGraphBuilder.buildDependencyGraph(request, null); boolean modified = false; - for (org.apache.maven.shared.dependency.tree.DependencyNode n2 : node.getChildren()) + for (org.apache.maven.shared.dependency.graph.DependencyNode n2 : node.getChildren()) { - for (org.apache.maven.shared.dependency.tree.DependencyNode n3 : n2.getChildren()) + for (org.apache.maven.shared.dependency.graph.DependencyNode n3 : n2.getChildren()) { //anything two levels deep that is marked "included" //is stuff that was excluded by the original poms, make sure it //remains excluded IF promoting transitives. - if (n3.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED) + //if (n3.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED) + if (true) { //check if it really isn't in the list of original dependencies. Maven //prior to 2.0.8 may grab versions from transients instead of -- 2.26.2