1 package org.apache.maven.shared.dependency.tree;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collections;
23 import java.util.Map;
24 import java.util.Set;
25
26 import org.apache.maven.artifact.factory.ArtifactFactory;
27 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
28 import org.apache.maven.artifact.repository.ArtifactRepository;
29 import org.apache.maven.artifact.resolver.ArtifactCollector;
30 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
31 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
32 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
33 import org.apache.maven.project.MavenProject;
34 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
35 import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
36 import org.codehaus.plexus.logging.AbstractLogEnabled;
37
38 /**
39 * Default implementation of <code>DependencyTreeBuilder</code>.
40 *
41 * @author Edwin Punzalan
42 * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
43 * @version $Id: DefaultDependencyTreeBuilder.java 661727 2008-05-30 14:21:49Z bentmann $
44 * @plexus.component role="org.apache.maven.shared.dependency.tree.DependencyTreeBuilder"
45 * @see DependencyTreeBuilder
46 */
47 public class DefaultDependencyTreeBuilder extends AbstractLogEnabled implements DependencyTreeBuilder
48 {
49
50
51 private ArtifactResolutionResult result;
52
53
54
55 /**
56 * {@inheritDoc}
57 *
58 * @deprecated
59 */
60 public DependencyTree buildDependencyTree( MavenProject project, ArtifactRepository repository,
61 ArtifactFactory factory, ArtifactMetadataSource metadataSource,
62 ArtifactCollector collector ) throws DependencyTreeBuilderException
63 {
64 DependencyNode rootNode = buildDependencyTree( project, repository, factory, metadataSource, null, collector );
65
66 CollectingDependencyNodeVisitor collectingVisitor = new CollectingDependencyNodeVisitor();
67 rootNode.accept( collectingVisitor );
68
69 return new DependencyTree( rootNode, collectingVisitor.getNodes() );
70 }
71
72 /**
73 * {@inheritDoc}
74 */
75 public DependencyNode buildDependencyTree( MavenProject project, ArtifactRepository repository,
76 ArtifactFactory factory, ArtifactMetadataSource metadataSource,
77 ArtifactFilter filter, ArtifactCollector collector )
78 throws DependencyTreeBuilderException
79 {
80 DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener( getLogger() );
81
82 try
83 {
84 Map managedVersions = project.getManagedVersionMap();
85
86 Set dependencyArtifacts = project.getDependencyArtifacts();
87
88 if ( dependencyArtifacts == null )
89 {
90 dependencyArtifacts = project.createArtifacts( factory, null, null );
91 }
92
93 getLogger().debug( "Dependency tree resolution listener events:" );
94
95
96
97 result = collector.collect( dependencyArtifacts, project.getArtifact(), managedVersions, repository,
98 project.getRemoteArtifactRepositories(), metadataSource, filter,
99 Collections.singletonList( listener ) );
100
101 return listener.getRootNode();
102 }
103 catch ( ArtifactResolutionException exception )
104 {
105 throw new DependencyTreeBuilderException( "Cannot build project dependency tree", exception );
106 }
107 catch ( InvalidDependencyVersionException e )
108 {
109 throw new DependencyTreeBuilderException( "Invalid dependency version for artifact "
110 + project.getArtifact() );
111 }
112 }
113
114
115
116 protected ArtifactResolutionResult getArtifactResolutionResult()
117 {
118 return result;
119 }
120 }