1 package org.codehaus.mojo.appassembler;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import java.io.File;
28 import java.util.Collections;
29 import java.util.Iterator;
30 import java.util.Set;
31
32 import org.apache.maven.artifact.Artifact;
33 import org.apache.maven.artifact.factory.ArtifactFactory;
34 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
35 import org.apache.maven.artifact.repository.ArtifactRepository;
36 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
37 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
38 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
39 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
40 import org.apache.maven.artifact.resolver.ArtifactResolver;
41 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
42 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
43 import org.apache.maven.artifact.versioning.VersionRange;
44 import org.apache.maven.plugin.MojoExecutionException;
45 import org.apache.maven.plugin.MojoFailureException;
46 import org.apache.maven.plugins.annotations.Component;
47 import org.apache.maven.plugins.annotations.LifecyclePhase;
48 import org.apache.maven.plugins.annotations.Mojo;
49 import org.apache.maven.plugins.annotations.Parameter;
50 import org.apache.maven.plugins.annotations.ResolutionScope;
51
52
53
54
55
56
57
58
59 @Mojo( name = "create-repository", defaultPhase = LifecyclePhase.PACKAGE, requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true )
60 public class CreateRepositoryMojo
61 extends AbstractAppAssemblerMojo
62 {
63
64
65
66
67
68
69
70 @Parameter( defaultValue = "${project.build.directory}/appassembler", required = true )
71 private File assembleDirectory;
72
73
74
75
76
77 @Parameter( defaultValue = "false" )
78 private boolean installBooterArtifacts;
79
80
81
82
83
84
85
86 @Parameter( defaultValue = "repo" )
87 private String repositoryName;
88
89
90
91
92
93 @Parameter( defaultValue = "${project.artifacts}", readonly = true )
94 private Set<Artifact> artifacts;
95
96 @Parameter( defaultValue = "${plugin.version}", readonly = true )
97 private String pluginVersion;
98
99
100
101
102
103 @Component
104 private ArtifactFactory artifactFactory;
105
106 @Component
107 private ArtifactResolver artifactResolver;
108
109 @Component
110 private ArtifactMetadataSource metadataSource;
111
112
113
114
115
116
117
118
119
120
121 public void execute()
122 throws MojoExecutionException, MojoFailureException
123 {
124
125
126
127
128 ArtifactRepositoryLayout artifactRepositoryLayout = getArtifactRepositoryLayout();
129
130
131
132
133
134 StringBuffer path = new StringBuffer( "file://" + assembleDirectory.getAbsolutePath() + "/" );
135
136 path.append( repositoryName );
137
138 ArtifactRepository artifactRepository =
139 artifactRepositoryFactory.createDeploymentArtifactRepository( "appassembler", path.toString(),
140 artifactRepositoryLayout, true );
141
142
143
144
145
146 installArtifact( projectArtifact, artifactRepository );
147
148
149
150
151
152
153 for ( Artifact artifact : artifacts )
154 {
155 installArtifact( artifact, artifactRepository, this.useTimestampInSnapshotFileName );
156 }
157
158 if ( installBooterArtifacts )
159 {
160
161
162
163 installBooterArtifacts( artifactRepository );
164 }
165 }
166
167 private void installBooterArtifacts( ArtifactRepository artifactRepository )
168 throws MojoExecutionException
169 {
170 Artifact artifact =
171 artifactFactory.createDependencyArtifact( "org.codehaus.mojo.appassembler", "appassembler-booter",
172 VersionRange.createFromVersion( pluginVersion ), "jar", null,
173 Artifact.SCOPE_RUNTIME );
174 try
175 {
176 Artifact p =
177 artifactFactory.createBuildArtifact( "org.codehaus.mojo.appassembler", "appassembler-maven-plugin",
178 pluginVersion, "jar" );
179
180 ArtifactFilter filter = new ExcludesArtifactFilter( Collections.singletonList( "junit:junit" ) );
181 ArtifactResolutionResult result =
182 artifactResolver.resolveTransitively( Collections.singleton( artifact ), p, localRepository,
183 Collections.EMPTY_LIST, metadataSource, filter );
184 for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
185 {
186 Artifact a = (Artifact) i.next();
187 installArtifact( a, artifactRepository, this.useTimestampInSnapshotFileName );
188 }
189 }
190 catch ( ArtifactResolutionException e )
191 {
192 throw new MojoExecutionException( "Failed to copy artifact.", e );
193 }
194 catch ( ArtifactNotFoundException e )
195 {
196 throw new MojoExecutionException( "Failed to copy artifact.", e );
197 }
198 }
199
200 }