Skip to content

Commit

Permalink
[FELIX-5795] Maven Bundle Plugin Should Upgrade to Use Maven Dependen…
Browse files Browse the repository at this point in the history
…cy Tree 3.x

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

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1869787 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
gnodet committed Nov 14, 2019
1 parent 329fabd commit 8a9a3c6
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 2,986 deletions.
18 changes: 9 additions & 9 deletions tools/maven-bundle-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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>
Expand All @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

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;
Expand All @@ -37,7 +39,6 @@
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;
Expand All @@ -48,13 +49,14 @@
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;
Expand Down Expand Up @@ -98,18 +100,12 @@ public class BundleAllPlugin extends ManifestPlugin
@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;

Expand Down Expand Up @@ -179,36 +175,40 @@ protected BundleInfo bundleAll( MavenProject project, int maxDepth ) throws Mojo

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 );
}

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() ) )
Expand All @@ -234,12 +234,11 @@ protected BundleInfo bundleAll( MavenProject project, int maxDepth ) throws Mojo

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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
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;
Expand All @@ -64,6 +63,7 @@
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;
Expand All @@ -73,12 +73,15 @@
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;
Expand Down Expand Up @@ -129,7 +132,6 @@ public class BundlePlugin extends AbstractMojo
*/
@Parameter( property = "niceManifest", defaultValue = "false" )
protected boolean niceManifest;

/**
* File where the BND instructions will be dumped
*/
Expand Down Expand Up @@ -221,7 +223,7 @@ public class BundlePlugin extends AbstractMojo
protected MavenProjectBuilder mavenProjectBuilder;

@Component
private DependencyTreeBuilder dependencyTreeBuilder;
protected DependencyGraphBuilder dependencyGraphBuilder;

@Component
private ArtifactMetadataSource artifactMetadataSource;
Expand Down Expand Up @@ -737,7 +739,7 @@ protected void addMavenInstructions(MavenProject currentProject, Builder builder
// 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>();

Expand Down Expand Up @@ -838,7 +840,7 @@ private void createDependencyReducedPom( Set<String> artifactsToRemove )

try
{
PomWriter.write( w, model, true );
new MavenXpp3Writer().write( w, model );
}
finally
{
Expand Down Expand Up @@ -875,20 +877,21 @@ private String getId( String groupId, String artifactId, String type, String cla
}

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
Expand All @@ -899,8 +902,8 @@ public boolean updateExcludesInDeps( MavenProject project, List<Dependency> depe
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;
}
Expand Down Expand Up @@ -1773,7 +1776,14 @@ protected Properties getDefaultProperties( MavenProject currentProject )
File filterFile = new File( i.next() );
if ( filterFile.isFile() )
{
properties.putAll( PropertyUtils.loadProperties( filterFile ) );
try
{
properties.putAll( PropertyUtils.loadProperties( filterFile ) );
}
catch ( IOException e )
{
// Ignore
}
}
}

Expand Down

This file was deleted.

Loading

0 comments on commit 8a9a3c6

Please sign in to comment.