1 package org.apache.maven.plugins.dependency.resolvers;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23 import java.util.LinkedHashSet;
24 import java.util.Objects;
25 import java.util.Set;
26
27 import org.apache.maven.artifact.Artifact;
28 import org.apache.maven.plugin.MojoExecutionException;
29 import org.apache.maven.plugins.annotations.LifecyclePhase;
30 import org.apache.maven.plugins.annotations.Mojo;
31 import org.apache.maven.plugins.annotations.Parameter;
32 import org.apache.maven.plugins.dependency.utils.DependencyUtil;
33 import org.apache.maven.project.ProjectBuildingRequest;
34 import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
35 import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter;
36 import org.apache.maven.shared.artifact.filter.collection.FilterArtifacts;
37 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverException;
38 import org.apache.maven.shared.transfer.dependencies.DefaultDependableCoordinate;
39 import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
40
41
42
43
44
45
46
47 @Mojo( name = "resolve-plugins", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true )
48 public class ResolvePluginsMojo
49 extends AbstractResolveMojo
50 {
51
52 @Parameter( property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}" )
53 private String outputEncoding;
54
55
56
57
58
59
60 @Override
61 protected void doExecute()
62 throws MojoExecutionException
63 {
64 try
65 {
66
67 final Set<Artifact> plugins = resolvePluginArtifacts();
68
69 StringBuilder sb = new StringBuilder();
70 sb.append( System.lineSeparator() );
71 sb.append( "The following plugins have been resolved:" );
72 sb.append( System.lineSeparator() );
73 if ( plugins == null || plugins.isEmpty() )
74 {
75 sb.append( " none" );
76 sb.append( System.lineSeparator() );
77 }
78 else
79 {
80 for ( Artifact plugin : plugins )
81 {
82 String artifactFilename = null;
83 if ( outputAbsoluteArtifactFilename )
84 {
85 try
86 {
87
88 artifactFilename = plugin.getFile().getAbsoluteFile().getPath();
89 }
90 catch ( NullPointerException e )
91 {
92
93 artifactFilename = null;
94 }
95 }
96
97 String id = plugin.toString();
98 sb.append( " " )
99 .append( id )
100 .append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
101 .append( System.lineSeparator() );
102
103 if ( !excludeTransitive )
104 {
105 DefaultDependableCoordinate pluginCoordinate = new DefaultDependableCoordinate();
106 pluginCoordinate.setGroupId( plugin.getGroupId() );
107 pluginCoordinate.setArtifactId( plugin.getArtifactId() );
108 pluginCoordinate.setVersion( plugin.getVersion() );
109
110 for ( final Artifact artifact : resolveArtifactDependencies( pluginCoordinate ) )
111 {
112 artifactFilename = null;
113 if ( outputAbsoluteArtifactFilename )
114 {
115 try
116 {
117
118 artifactFilename = artifact.getFile().getAbsoluteFile().getPath();
119 }
120 catch ( NullPointerException e )
121 {
122
123 artifactFilename = null;
124 }
125 }
126
127 id = artifact.toString();
128 sb.append( " " )
129 .append( id )
130 .append( outputAbsoluteArtifactFilename ? ":" + artifactFilename : "" )
131 .append( System.lineSeparator() );
132 }
133 }
134 }
135 sb.append( System.lineSeparator() );
136
137 String output = sb.toString();
138 if ( outputFile == null )
139 {
140 DependencyUtil.log( output, getLog() );
141 }
142 else
143 {
144 String encoding = Objects.toString( outputEncoding, "UTF-8" );
145 DependencyUtil.write( output, outputFile, appendOutput, encoding );
146 }
147 }
148 }
149 catch ( IOException | ArtifactFilterException | ArtifactResolverException | DependencyResolverException e )
150 {
151 throw new MojoExecutionException( e.getMessage(), e );
152 }
153 }
154
155
156
157
158
159
160
161
162 protected Set<Artifact> resolvePluginArtifacts()
163 throws ArtifactFilterException, ArtifactResolverException
164 {
165 final Set<Artifact> plugins = getProject().getPluginArtifacts();
166 final Set<Artifact> reports = getProject().getReportArtifacts();
167
168 Set<Artifact> artifacts = new LinkedHashSet<>();
169 artifacts.addAll( reports );
170 artifacts.addAll( plugins );
171
172 final FilterArtifacts filter = getArtifactsFilter();
173 artifacts = filter.filter( artifacts );
174
175 Set<Artifact> resolvedArtifacts = new LinkedHashSet<>( artifacts.size() );
176
177 for ( final Artifact artifact : new LinkedHashSet<>( artifacts ) )
178 {
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193 ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest();
194
195
196 resolvedArtifacts.add( getArtifactResolver().resolveArtifact( buildingRequest, artifact ).getArtifact() );
197 }
198 return artifacts;
199 }
200
201 @Override
202 protected ArtifactsFilter getMarkedArtifactFilter()
203 {
204 return null;
205 }
206 }