1 package org.apache.maven.plugin.invoker;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.Collection;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.Map;
28
29 import org.apache.maven.artifact.Artifact;
30 import org.apache.maven.artifact.factory.ArtifactFactory;
31 import org.apache.maven.artifact.installer.ArtifactInstallationException;
32 import org.apache.maven.artifact.installer.ArtifactInstaller;
33 import org.apache.maven.artifact.repository.ArtifactRepository;
34 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
35 import org.apache.maven.plugin.AbstractMojo;
36 import org.apache.maven.plugin.MojoExecutionException;
37 import org.apache.maven.plugin.MojoFailureException;
38 import org.apache.maven.project.MavenProject;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class InstallMojo
54 extends AbstractMojo
55 {
56
57
58
59
60
61
62 private ArtifactInstaller installer;
63
64
65
66
67
68
69 private ArtifactFactory artifactFactory;
70
71
72
73
74
75
76 private ArtifactRepositoryFactory repositoryFactory;
77
78
79
80
81
82
83 protected ArtifactRepository localRepository;
84
85
86
87
88
89
90
91
92
93 private File localRepositoryPath;
94
95
96
97
98
99
100
101
102 private MavenProject project;
103
104
105
106
107
108
109
110 private Collection reactorProjects;
111
112
113
114
115 public void execute()
116 throws MojoExecutionException, MojoFailureException
117 {
118 ArtifactRepository testRepository = createTestRepository();
119 installProjectArtifacts( project, testRepository );
120 installProjectParents( project, testRepository );
121 installProjectDependencies( project, reactorProjects, testRepository );
122 }
123
124
125
126
127
128
129
130
131
132
133 private ArtifactRepository createTestRepository()
134 throws MojoExecutionException
135 {
136 ArtifactRepository testRepository = localRepository;
137
138 if ( localRepositoryPath != null )
139 {
140 try
141 {
142 if ( !localRepositoryPath.exists() && !localRepositoryPath.mkdirs() )
143 {
144 throw new IOException( "Failed to create directory: " + localRepositoryPath );
145 }
146
147 testRepository =
148 repositoryFactory.createArtifactRepository( localRepository.getId(),
149 localRepositoryPath.toURL().toExternalForm(),
150 localRepository.getLayout(),
151 localRepository.getSnapshots(),
152 localRepository.getReleases() );
153 }
154 catch ( Exception e )
155 {
156 throw new MojoExecutionException( "Failed to create local repository: " + localRepositoryPath, e );
157 }
158 }
159
160 return testRepository;
161 }
162
163
164
165
166
167
168
169
170 private void installProjectArtifacts( MavenProject mvnProject, ArtifactRepository testRepository )
171 throws MojoExecutionException
172 {
173 try
174 {
175 installProjectPom( mvnProject, testRepository );
176
177
178 installer.install( mvnProject.getArtifact().getFile(), mvnProject.getArtifact(), testRepository );
179
180
181 Collection attachedArtifacts = mvnProject.getAttachedArtifacts();
182 for ( Iterator artifactIter = attachedArtifacts.iterator(); artifactIter.hasNext(); )
183 {
184 Artifact theArtifact = (Artifact) artifactIter.next();
185 installer.install( theArtifact.getFile(), theArtifact, testRepository );
186 }
187 }
188 catch ( ArtifactInstallationException e )
189 {
190 throw new MojoExecutionException( "Failed to install project artifacts: " + mvnProject, e );
191 }
192 }
193
194
195
196
197
198
199
200
201
202 private void installProjectParents( MavenProject mvnProject, ArtifactRepository testRepository )
203 throws MojoExecutionException
204 {
205 for ( MavenProject parent = mvnProject.getParent(); parent != null; parent = parent.getParent() )
206 {
207 if ( parent.getFile() == null )
208 {
209 break;
210 }
211 installProjectPom( parent, testRepository );
212 }
213 }
214
215
216
217
218
219
220
221
222 private void installProjectPom( MavenProject mvnProject, ArtifactRepository testRepository )
223 throws MojoExecutionException
224 {
225 try
226 {
227 Artifact pomArtifact =
228 artifactFactory.createProjectArtifact( mvnProject.getGroupId(), mvnProject.getArtifactId(),
229 mvnProject.getVersion() );
230 installer.install( mvnProject.getFile(), pomArtifact, testRepository );
231 }
232 catch ( Exception e )
233 {
234 throw new MojoExecutionException( "Failed to install POM: " + mvnProject, e );
235 }
236 }
237
238
239
240
241
242
243
244
245
246
247 private void installProjectDependencies( MavenProject mvnProject, Collection reactorProjects,
248 ArtifactRepository testRepository )
249 throws MojoExecutionException
250 {
251 Map projects = new HashMap();
252 for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
253 {
254 MavenProject reactorProject = (MavenProject) it.next();
255 projects.put( reactorProject.getId(), reactorProject );
256 }
257
258 for ( Iterator it = mvnProject.getArtifacts().iterator(); it.hasNext(); )
259 {
260 Artifact artifact = (Artifact) it.next();
261 String id =
262 artifact.getGroupId() + ':' + artifact.getArtifactId() + ':' + artifact.getType() + ':'
263 + artifact.getVersion();
264 MavenProject requiredProject = (MavenProject) projects.remove( id );
265 if ( requiredProject != null )
266 {
267 installProjectArtifacts( requiredProject, testRepository );
268 installProjectParents( requiredProject, testRepository );
269 }
270 }
271 }
272
273 }