1 package org.apache.maven.plugin.dependency;
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.HashSet;
25 import java.util.Iterator;
26 import java.util.Set;
27
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.artifact.metadata.ArtifactMetadata;
30 import org.apache.maven.artifact.repository.ArtifactRepository;
31 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
32 import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
33 import org.apache.maven.artifact.repository.metadata.Snapshot;
34 import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
35 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
36 import org.apache.maven.artifact.transform.SnapshotTransformation;
37 import org.apache.maven.plugin.MojoExecutionException;
38 import org.apache.maven.plugin.dependency.utils.DependencyUtil;
39 import org.apache.maven.plugin.dependency.utils.markers.DefaultFileMarkerHandler;
40 import org.apache.maven.project.MavenProject;
41 import org.codehaus.plexus.util.StringUtils;
42
43 public class TestCopyDependenciesMojo2
44 extends AbstractDependencyMojoTestCase
45 {
46
47 CopyDependenciesMojo mojo;
48
49 protected void setUp()
50 throws Exception
51 {
52
53 super.setUp( "copy-dependencies", true );
54
55 File testPom = new File( getBasedir(), "target/test-classes/unit/copy-dependencies-test/plugin-config.xml" );
56 mojo = (CopyDependenciesMojo) lookupMojo( "copy-dependencies", testPom );
57 mojo.outputDirectory = new File( this.testDir, "outputDirectory" );
58
59
60 assertNotNull( mojo );
61 assertNotNull( mojo.getProject() );
62 MavenProject project = mojo.getProject();
63
64 Set artifacts = this.stubFactory.getScopedArtifacts();
65 Set directArtifacts = this.stubFactory.getReleaseAndSnapshotArtifacts();
66 artifacts.addAll( directArtifacts );
67
68 project.setArtifacts( artifacts );
69 project.setDependencyArtifacts( directArtifacts );
70 mojo.markersDirectory = new File( this.testDir, "markers" );
71
72 }
73
74 public void assertNoMarkerFile( Artifact artifact )
75 {
76 DefaultFileMarkerHandler handle = new DefaultFileMarkerHandler( artifact, mojo.markersDirectory );
77 try
78 {
79 assertFalse( handle.isMarkerSet() );
80 }
81 catch ( MojoExecutionException e )
82 {
83 fail( e.getLongMessage() );
84 }
85
86 }
87
88 public void testCopyDependenciesMojoIncludeCompileScope()
89 throws Exception
90 {
91 mojo.project.setArtifacts( stubFactory.getScopedArtifacts() );
92 mojo.project.setDependencyArtifacts( new HashSet() );
93 mojo.includeScope = "compile";
94 mojo.execute();
95 ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.includeScope );
96
97 Iterator iter = mojo.project.getArtifacts().iterator();
98 while ( iter.hasNext() )
99 {
100 Artifact artifact = (Artifact) iter.next();
101 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
102 File file = new File( mojo.outputDirectory, fileName );
103
104 assertEquals( saf.include( artifact ), file.exists() );
105 }
106 }
107
108 public void testCopyDependenciesMojoIncludeTestScope()
109 throws Exception
110 {
111 mojo.project.setArtifacts( stubFactory.getScopedArtifacts() );
112 mojo.project.setDependencyArtifacts( new HashSet() );
113 mojo.includeScope = "test";
114
115 mojo.execute();
116 ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.includeScope );
117
118 Iterator iter = mojo.project.getArtifacts().iterator();
119 while ( iter.hasNext() )
120 {
121 Artifact artifact = (Artifact) iter.next();
122 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
123 File file = new File( mojo.outputDirectory, fileName );
124
125 assertEquals( saf.include( artifact ), file.exists() );
126 }
127 }
128
129 public void testCopyDependenciesMojoIncludeRuntimeScope()
130 throws Exception
131 {
132 mojo.project.setArtifacts( stubFactory.getScopedArtifacts() );
133 mojo.project.setDependencyArtifacts( new HashSet() );
134 mojo.includeScope = "runtime";
135 mojo.execute();
136 ScopeArtifactFilter saf = new ScopeArtifactFilter( mojo.includeScope );
137
138 Iterator iter = mojo.project.getArtifacts().iterator();
139 while ( iter.hasNext() )
140 {
141 Artifact artifact = (Artifact) iter.next();
142 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
143 File file = new File( mojo.outputDirectory, fileName );
144
145 assertEquals( saf.include( artifact ), file.exists() );
146 }
147 }
148
149 public void testCopyDependenciesMojoIncludeprovidedScope()
150 throws Exception
151 {
152 mojo.project.setArtifacts( stubFactory.getScopedArtifacts() );
153 mojo.project.setDependencyArtifacts( new HashSet() );
154 mojo.includeScope = "provided";
155
156 mojo.execute();
157 Iterator iter = mojo.project.getArtifacts().iterator();
158 while ( iter.hasNext() )
159 {
160 Artifact artifact = (Artifact) iter.next();
161 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
162 File file = new File( mojo.outputDirectory, fileName );
163 assertEquals( Artifact.SCOPE_PROVIDED.equals( artifact.getScope() ), file.exists() );
164 }
165 }
166
167 public void testCopyDependenciesMojoIncludesystemScope()
168 throws Exception
169 {
170 mojo.project.setArtifacts( stubFactory.getScopedArtifacts() );
171 mojo.project.setDependencyArtifacts( new HashSet() );
172 mojo.includeScope = "system";
173
174 mojo.execute();
175
176 Iterator iter = mojo.project.getArtifacts().iterator();
177 while ( iter.hasNext() )
178 {
179 Artifact artifact = (Artifact) iter.next();
180 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
181 File file = new File( mojo.outputDirectory, fileName );
182
183 assertEquals( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ), file.exists() );
184 }
185 }
186
187 public void testSubPerArtifact()
188 throws Exception
189 {
190 mojo.useSubDirectoryPerArtifact = true;
191 mojo.execute();
192
193 Iterator iter = mojo.project.getArtifacts().iterator();
194 while ( iter.hasNext() )
195 {
196 Artifact artifact = (Artifact) iter.next();
197 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
198 File folder = DependencyUtil.getFormattedOutputDirectory( false, true, false, false, mojo.outputDirectory,
199 artifact );
200 File file = new File( folder, fileName );
201 assertTrue( file.exists() );
202 }
203 }
204
205 public void testSubPerArtifactAndType()
206 throws Exception
207 {
208 mojo.project.setArtifacts( stubFactory.getTypedArtifacts() );
209 mojo.project.setDependencyArtifacts( new HashSet() );
210 mojo.useSubDirectoryPerArtifact = true;
211 mojo.useSubDirectoryPerType = true;
212 mojo.execute();
213
214 Iterator iter = mojo.project.getArtifacts().iterator();
215 while ( iter.hasNext() )
216 {
217 Artifact artifact = (Artifact) iter.next();
218 String fileName = DependencyUtil.getFormattedFileName( artifact, false );
219 File folder = DependencyUtil.getFormattedOutputDirectory( true, true, false, false, mojo.outputDirectory,
220 artifact );
221 File file = new File( folder, fileName );
222 assertTrue( file.exists() );
223 }
224 }
225
226 public void testRepositoryLayout()
227 throws Exception
228 {
229 String baseVersion = "2.0-SNAPSHOT";
230 String groupId = "testGroupId";
231 String artifactId = "expanded-snapshot";
232
233 Artifact expandedSnapshot = createExpandedVersionArtifact( baseVersion,
234 groupId,
235 artifactId,
236 "compile",
237 "jar",
238 null);
239
240 mojo.project.getArtifacts().add(expandedSnapshot);
241 mojo.project.getDependencyArtifacts().add(expandedSnapshot);
242
243 Artifact pomExpandedSnapshot = createExpandedVersionArtifact( baseVersion,
244 groupId,
245 artifactId,
246 "compile",
247 "pom",
248 null);
249 mojo.project.getArtifacts().add(pomExpandedSnapshot);
250 mojo.project.getDependencyArtifacts().add(pomExpandedSnapshot);
251
252 mojo.useRepositoryLayout = true;
253 mojo.execute();
254
255 File outputDirectory = mojo.outputDirectory;
256 ArtifactRepository targetRepository = mojo.repositoryFactory.createDeploymentArtifactRepository(
257 "local",
258 outputDirectory.toURL().toExternalForm(),
259 new DefaultRepositoryLayout(),
260 false );
261
262 Iterator iter = mojo.project.getArtifacts().iterator();
263 while ( iter.hasNext() )
264 {
265 Artifact artifact = (Artifact) iter.next();
266 assertArtifactExists( artifact, targetRepository );
267
268 if ( ! artifact.getBaseVersion().equals( artifact.getVersion() ) )
269 {
270 Artifact baseArtifact = mojo.factory.createArtifact( artifact.getGroupId(),
271 artifact.getArtifactId(),
272 artifact.getBaseVersion(),
273 artifact.getScope(),
274 artifact.getType() );
275 assertArtifactExists( baseArtifact, targetRepository );
276 }
277
278 }
279 }
280
281 private Artifact createExpandedVersionArtifact( String baseVersion,
282 String groupId,
283 String artifactId,
284 String scope,
285 String type,
286 String classifier )
287 throws IOException
288 {
289 Artifact expandedSnapshot = this.stubFactory.createArtifact( groupId, artifactId, baseVersion, scope, type, classifier );
290
291 SnapshotTransformation tr = new SnapshotTransformation();
292 Snapshot snapshot = new Snapshot();
293 snapshot.setTimestamp( tr.getDeploymentTimestamp() );
294 snapshot.setBuildNumber( 1 );
295 RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( expandedSnapshot, snapshot );
296 String newVersion = snapshot.getTimestamp() + "-" + snapshot.getBuildNumber();
297 expandedSnapshot.setResolvedVersion( StringUtils.replace( baseVersion, Artifact.SNAPSHOT_VERSION, newVersion ) );
298 expandedSnapshot.addMetadata( metadata );
299 return expandedSnapshot;
300 }
301
302 private void assertArtifactExists( Artifact artifact, ArtifactRepository targetRepository ) {
303 File file = new File( targetRepository.getBasedir(),
304 targetRepository.getLayout().pathOf( artifact ) );
305 assertTrue( file.exists() );
306
307 Iterator metaIter = artifact.getMetadataList().iterator();
308 while ( metaIter.hasNext() )
309 {
310 ArtifactMetadata meta = (ArtifactMetadata) metaIter.next();
311 File metaFile = new File( targetRepository.getBasedir(),
312 targetRepository.getLayout().pathOfLocalRepositoryMetadata( meta, targetRepository) );
313 assertTrue( metaFile.exists() );
314 }
315 }
316
317 public void testSubPerArtifactRemoveVersion()
318 throws Exception
319 {
320 mojo.useSubDirectoryPerArtifact = true;
321 mojo.stripVersion = true;
322 mojo.execute();
323
324 Iterator iter = mojo.project.getArtifacts().iterator();
325 while ( iter.hasNext() )
326 {
327 Artifact artifact = (Artifact) iter.next();
328 String fileName = DependencyUtil.getFormattedFileName( artifact, true );
329 File folder = DependencyUtil.getFormattedOutputDirectory( false, true, false, true, mojo.outputDirectory,
330 artifact );
331 File file = new File( folder, fileName );
332 assertTrue( file.exists() );
333 }
334 }
335
336 public void testSubPerArtifactAndTypeRemoveVersion()
337 throws Exception
338 {
339 mojo.project.setArtifacts( stubFactory.getTypedArtifacts() );
340 mojo.project.setDependencyArtifacts( new HashSet() );
341 mojo.useSubDirectoryPerArtifact = true;
342 mojo.useSubDirectoryPerType = true;
343 mojo.stripVersion = true;
344 mojo.execute();
345
346 Iterator iter = mojo.project.getArtifacts().iterator();
347 while ( iter.hasNext() )
348 {
349 Artifact artifact = (Artifact) iter.next();
350 String fileName = DependencyUtil.getFormattedFileName( artifact, true );
351 File folder = DependencyUtil.getFormattedOutputDirectory( true, true, false, true, mojo.outputDirectory,
352 artifact );
353 File file = new File( folder, fileName );
354 assertTrue( file.exists() );
355 }
356 }
357
358 }