You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2019/11/14 09:52:03 UTC

svn commit: r1869787 - in /felix/trunk/tools/maven-bundle-plugin: ./ src/main/java/org/apache/felix/bundleplugin/ src/main/java/org/apache/felix/bundleplugin/pom/ src/main/java/org/apache/maven/shared/dependency/tree/

Author: gnodet
Date: Thu Nov 14 09:52:03 2019
New Revision: 1869787

URL: http://svn.apache.org/viewvc?rev=1869787&view=rev
Log:
[FELIX-5795] Maven Bundle Plugin Should Upgrade to Use Maven Dependency Tree 3.x

Also upgrade plexus-utils and maven-plugin-testing-harness

Removed:
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/pom/Counter.java
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/pom/MavenJDOMWriter.java
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/pom/PomWriter.java
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
Modified:
    felix/trunk/tools/maven-bundle-plugin/pom.xml
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java
    felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java

Modified: felix/trunk/tools/maven-bundle-plugin/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/tools/maven-bundle-plugin/pom.xml?rev=1869787&r1=1869786&r2=1869787&view=diff
==============================================================================
--- felix/trunk/tools/maven-bundle-plugin/pom.xml (original)
+++ felix/trunk/tools/maven-bundle-plugin/pom.xml Thu Nov 14 09:52:03 2019
@@ -174,11 +174,11 @@
     <artifactId>biz.aQute.bndlib</artifactId>
     <version>4.2.0</version>
   </dependency>
-     <dependency>
-         <groupId>org.slf4j</groupId>
-         <artifactId>slf4j-api</artifactId>
-         <version>1.7.25</version>
-     </dependency>
+  <dependency>
+    <groupId>org.slf4j</groupId>
+    <artifactId>slf4j-api</artifactId>
+    <version>1.7.25</version>
+  </dependency>
   <dependency>
     <groupId>org.apache.felix</groupId>
     <artifactId>org.apache.felix.bundlerepository</artifactId>
@@ -212,12 +212,12 @@
   <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>
    <artifactId>plexus-utils</artifactId>
-   <version>3.0.10</version>
+   <version>3.0.24</version>
   </dependency>
   <dependency>
    <groupId>org.sonatype.plexus</groupId>
@@ -241,9 +241,9 @@
    <scope>provided</scope>
   </dependency>
   <dependency>
-   <groupId>org.apache.maven.shared</groupId>
+   <groupId>org.apache.maven.plugin-testing</groupId>
    <artifactId>maven-plugin-testing-harness</artifactId>
-   <version>1.1</version>
+   <version>3.3.0</version>
    <scope>test</scope>
   </dependency>
   <dependency>

Modified: felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java?rev=1869787&r1=1869786&r2=1869787&view=diff
==============================================================================
--- felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java (original)
+++ felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java Thu Nov 14 09:52:03 2019
@@ -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.Artifac
 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.annotati
 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;
@@ -98,9 +100,6 @@ public class BundleAllPlugin extends Man
     @Component
     private ArtifactMetadataSource m_artifactMetadataSource;
 
-    @Component
-    private ArtifactCollector m_collector;
-
     /**
      * Artifact resolver, needed to download jars.
      */
@@ -108,9 +107,6 @@ public class BundleAllPlugin extends Man
     private ArtifactResolver m_artifactResolver;
 
     @Component
-    private DependencyTreeBuilder m_dependencyTreeBuilder;
-
-    @Component
     private MavenProjectBuilder m_mavenProjectBuilder;
 
     /**
@@ -179,17 +175,19 @@ public class BundleAllPlugin extends Man
 
         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 = 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,18 +195,20 @@ public class BundleAllPlugin extends Man
 
         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 ( Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) )
@@ -234,12 +234,11 @@ public class BundleAllPlugin extends Man
 
             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;
             }
 

Modified: felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java?rev=1869787&r1=1869786&r2=1869787&view=diff
==============================================================================
--- felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java (original)
+++ felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java Thu Nov 14 09:52:03 2019
@@ -47,7 +47,6 @@ import java.util.TreeMap;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 
-import org.apache.felix.bundleplugin.pom.PomWriter;
 import org.apache.maven.archiver.ManifestSection;
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.archiver.MavenArchiver;
@@ -64,6 +63,7 @@ import org.apache.maven.model.Exclusion;
 import org.apache.maven.model.License;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Resource;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -73,12 +73,15 @@ import org.apache.maven.plugins.annotati
 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;
@@ -129,7 +132,6 @@ public class BundlePlugin extends Abstra
      */
     @Parameter( property = "niceManifest", defaultValue = "false" )
     protected boolean niceManifest;
-
     /**
      * File where the BND instructions will be dumped
      */
@@ -221,7 +223,7 @@ public class BundlePlugin extends Abstra
     protected MavenProjectBuilder mavenProjectBuilder;
 
     @Component
-    private DependencyTreeBuilder dependencyTreeBuilder;
+    protected DependencyGraphBuilder dependencyGraphBuilder;
 
     @Component
     private ArtifactMetadataSource artifactMetadataSource;
@@ -737,7 +739,7 @@ public class BundlePlugin extends Abstra
     // 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>();
 
@@ -838,7 +840,7 @@ public class BundlePlugin extends Abstra
 
                 try
                 {
-                    PomWriter.write( w, model, true );
+                    new MavenXpp3Writer().write( w, model );
                 }
                 finally
                 {
@@ -875,20 +877,21 @@ public class BundlePlugin extends Abstra
     }
 
     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 (DependencyNode n2 : node.getChildren())
         {
-            for (org.apache.maven.shared.dependency.tree.DependencyNode n3 : n2.getChildren())
+            for (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 (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
@@ -899,8 +902,8 @@ public class BundlePlugin extends Abstra
                     boolean found = false;
                     for (Dependency dep : transitiveDeps)
                     {
-                        if (dep.getArtifactId().equals(n3.getArtifact().getArtifactId()) && dep.getGroupId().equals(
-                                n3.getArtifact().getGroupId()))
+                        if (dep.getArtifactId().equals(n3.getArtifact().getArtifactId())
+                                && dep.getGroupId().equals(n3.getArtifact().getGroupId()))
                         {
                             found = true;
                         }
@@ -1773,7 +1776,14 @@ public class BundlePlugin extends Abstra
             File filterFile = new File( i.next() );
             if ( filterFile.isFile() )
             {
-                properties.putAll( PropertyUtils.loadProperties( filterFile ) );
+                try
+                {
+                    properties.putAll( PropertyUtils.loadProperties( filterFile ) );
+                }
+                catch ( IOException e )
+                {
+                    // Ignore
+                }
             }
         }