1 package org.apache.maven.report.projectinfo.dependencies;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.maven.artifact.Artifact;
26 import org.apache.maven.artifact.ArtifactUtils;
27 import org.apache.maven.artifact.repository.ArtifactRepository;
28 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
29 import org.apache.maven.plugin.logging.Log;
30 import org.apache.maven.project.DefaultProjectBuildingRequest;
31 import org.apache.maven.project.MavenProject;
32 import org.apache.maven.project.ProjectBuilder;
33 import org.apache.maven.project.ProjectBuildingException;
34 import org.apache.maven.project.ProjectBuildingRequest;
35 import org.apache.maven.repository.RepositorySystem;
36 import org.apache.maven.shared.artifact.resolve.ArtifactResolver;
37 import org.apache.maven.shared.artifact.resolve.ArtifactResolverException;
38 import org.apache.maven.shared.artifact.resolve.ArtifactResult;
39
40
41
42
43
44
45
46 public class RepositoryUtils
47 {
48 private final Log log;
49
50 private final ProjectBuilder projectBuilder;
51
52 private final RepositorySystem repositorySystem;
53
54 private final List<ArtifactRepository> remoteRepositories;
55
56 private final List<ArtifactRepository> pluginRepositories;
57
58 private final ArtifactResolver resolver;
59
60 private final ProjectBuildingRequest buildingRequest;
61
62
63
64
65
66
67
68
69
70
71
72 public RepositoryUtils( Log log, ProjectBuilder projectBuilder, RepositorySystem repositorySystem,
73 ArtifactResolver resolver, List<ArtifactRepository> remoteRepositories,
74 List<ArtifactRepository> pluginRepositories, ProjectBuildingRequest buildingRequest,
75 RepositoryMetadataManager repositoryMetadataManager )
76 {
77 this.log = log;
78 this.projectBuilder = projectBuilder;
79 this.repositorySystem = repositorySystem;
80 this.resolver = resolver;
81 this.remoteRepositories = remoteRepositories;
82 this.pluginRepositories = pluginRepositories;
83 this.buildingRequest = buildingRequest;
84 }
85
86
87
88
89
90 public void resolve( Artifact artifact )
91 throws ArtifactResolverException
92 {
93 List<ArtifactRepository> repos =
94 new ArrayList<>( pluginRepositories.size() + remoteRepositories.size() );
95 repos.addAll( pluginRepositories );
96 repos.addAll( remoteRepositories );
97
98 ProjectBuildingRequest buildRequest = new DefaultProjectBuildingRequest( buildingRequest );
99 buildRequest.setRemoteRepositories( repos );
100
101 ArtifactResult result = resolver.resolveArtifact( buildRequest , artifact );
102 artifact.setFile( result.getArtifact().getFile() );
103 }
104
105
106
107
108
109
110
111
112 public MavenProject getMavenProjectFromRepository( Artifact artifact )
113 throws ProjectBuildingException
114 {
115 Artifact projectArtifact = artifact;
116
117 boolean allowStubModel = false;
118 if ( !"pom".equals( artifact.getType() ) )
119 {
120 projectArtifact = repositorySystem.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
121 artifact.getVersion() );
122 allowStubModel = true;
123 }
124
125 return projectBuilder.build( projectArtifact, allowStubModel, buildingRequest ).getProject();
126 }
127
128
129
130
131
132
133
134 public String getDependencyUrlFromRepository( Artifact artifact, ArtifactRepository repo )
135 {
136 if ( repo.isBlacklisted() )
137 {
138 return null;
139 }
140
141 Artifact copyArtifact = ArtifactUtils.copyArtifact( artifact );
142
143 if ( ( artifact.isSnapshot() && repo.getSnapshots().isEnabled() ) )
144 {
145 if ( artifact.getBaseVersion().equals( artifact.getVersion() ) )
146 {
147
148 if ( artifact.getMetadataList() == null || artifact.getMetadataList().isEmpty() )
149 {
150 try
151 {
152 resolve( artifact );
153 }
154 catch ( ArtifactResolverException e )
155 {
156 log.error( "Artifact: " + artifact.getId() + " could not be resolved." );
157 }
158 }
159 }
160 }
161
162 return repo.getUrl() + "/" + repo.pathOf( copyArtifact );
163 }
164 }