maven-bundle-plugin/0001-Port-to-current-maven-dependency-tree.patch
2020-06-07 20:46:11 +02:00

249 lines
11 KiB
Diff

From bdd09969d3719b18875ab0f2078baec48c5154b2 Mon Sep 17 00:00:00 2001
From: Michael Simacek <msimacek@redhat.com>
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 @@
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-dependency-tree</artifactId>
- <version>2.1</version>
+ <version>3.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
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<DependencyNode> stack = new ArrayDeque<DependencyNode>();
+ stack.push(dependencyTree);
+ Set<DependencyNode> visited = new HashSet<DependencyNode>();
+ 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<String> artifactsToRemove )
- throws IOException, ProjectBuildingException, DependencyTreeBuilderException {
+ throws IOException, ProjectBuildingException, DependencyGraphBuilderException {
Model model = project.getOriginalModel();
List<Dependency> dependencies = new ArrayList<Dependency>();
@@ -875,20 +881,22 @@ public class BundlePlugin extends AbstractMojo
}
public boolean updateExcludesInDeps( MavenProject project, List<Dependency> dependencies, List<Dependency> 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