1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.dependency;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.List;
24
25 import org.apache.maven.artifact.repository.ArtifactRepository;
26 import org.apache.maven.execution.MavenSession;
27 import org.apache.maven.plugin.AbstractMojo;
28 import org.apache.maven.plugin.MojoExecutionException;
29 import org.apache.maven.plugin.MojoFailureException;
30 import org.apache.maven.plugins.annotations.Component;
31 import org.apache.maven.plugins.annotations.Parameter;
32 import org.apache.maven.plugins.dependency.utils.DependencySilentLog;
33 import org.apache.maven.project.DefaultProjectBuildingRequest;
34 import org.apache.maven.project.MavenProject;
35 import org.apache.maven.project.ProjectBuildingRequest;
36 import org.codehaus.plexus.util.FileUtils;
37 import org.sonatype.plexus.build.incremental.BuildContext;
38
39
40
41
42 public abstract class AbstractDependencyMojo extends AbstractMojo {
43
44
45
46
47 @Component
48 private BuildContext buildContext;
49
50
51
52
53
54
55
56 @Parameter(defaultValue = "false")
57 private boolean skipDuringIncrementalBuild;
58
59
60
61
62 @Parameter(defaultValue = "${project}", readonly = true, required = true)
63 private MavenProject project;
64
65
66
67
68 @Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
69 private List<ArtifactRepository> remoteRepositories;
70
71
72
73
74 @Parameter(defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true)
75 private List<ArtifactRepository> remotePluginRepositories;
76
77
78
79
80 @Parameter(defaultValue = "${reactorProjects}", readonly = true)
81 protected List<MavenProject> reactorProjects;
82
83
84
85
86 @Parameter(defaultValue = "${session}", readonly = true, required = true)
87 protected MavenSession session;
88
89
90
91
92
93
94 @Parameter(property = "silent", defaultValue = "false")
95 private boolean silent;
96
97
98
99
100
101
102 @Parameter(property = "outputAbsoluteArtifactFilename", defaultValue = "false")
103 protected boolean outputAbsoluteArtifactFilename;
104
105
106
107
108
109
110 @Parameter(property = "mdep.skip", defaultValue = "false")
111 private boolean skip;
112
113
114
115
116
117
118 @Override
119 public final void execute() throws MojoExecutionException, MojoFailureException {
120 if (isSkip()) {
121 getLog().info("Skipping plugin execution");
122 return;
123 }
124
125 doExecute();
126 }
127
128
129
130
131
132 protected abstract void doExecute() throws MojoExecutionException, MojoFailureException;
133
134
135
136
137
138
139
140
141 protected void copyFile(File artifact, File destFile) throws MojoExecutionException {
142 try {
143 getLog().info("Copying "
144 + (this.outputAbsoluteArtifactFilename ? artifact.getAbsolutePath() : artifact.getName()) + " to "
145 + destFile);
146
147 if (artifact.isDirectory()) {
148
149 throw new MojoExecutionException("Artifact has not been packaged yet. When used on reactor artifact, "
150 + "copy should be executed after packaging: see MDEP-187.");
151 }
152
153 FileUtils.copyFile(artifact, destFile);
154 buildContext.refresh(destFile);
155 } catch (IOException e) {
156 throw new MojoExecutionException("Error copying artifact from " + artifact + " to " + destFile, e);
157 }
158 }
159
160
161
162
163
164 public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() {
165 return newProjectBuildingRequest(remoteRepositories);
166 }
167
168
169
170
171
172 protected ProjectBuildingRequest newResolvePluginProjectBuildingRequest() {
173 return newProjectBuildingRequest(remotePluginRepositories);
174 }
175
176 private ProjectBuildingRequest newProjectBuildingRequest(List<ArtifactRepository> repositories) {
177 ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
178
179 buildingRequest.setRemoteRepositories(repositories);
180
181 return buildingRequest;
182 }
183
184
185
186
187 public MavenProject getProject() {
188 return this.project;
189 }
190
191
192
193
194 public boolean isSkip() {
195 if (skipDuringIncrementalBuild && buildContext.isIncremental()) {
196 return true;
197 }
198 return skip;
199 }
200
201
202
203
204 public void setSkip(boolean skip) {
205 this.skip = skip;
206 }
207
208
209
210
211 protected final boolean isSilent() {
212 return silent;
213 }
214
215
216
217
218 public void setSilent(boolean silent) {
219 this.silent = silent;
220 if (silent) {
221 setLog(new DependencySilentLog());
222 }
223 }
224 }