1 package org.apache.maven.plugin.ear;
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.util.ArrayList;
24 import java.util.List;
25 import java.util.Set;
26
27 import org.apache.maven.artifact.Artifact;
28 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
29 import org.apache.maven.plugin.AbstractMojo;
30 import org.apache.maven.plugin.MojoExecutionException;
31 import org.apache.maven.plugin.MojoFailureException;
32 import org.apache.maven.plugin.ear.util.ArtifactTypeMappingService;
33 import org.apache.maven.plugin.ear.util.JavaEEVersion;
34 import org.apache.maven.project.MavenProject;
35 import org.codehaus.plexus.configuration.PlexusConfiguration;
36 import org.codehaus.plexus.configuration.PlexusConfigurationException;
37
38
39
40
41
42
43
44 public abstract class AbstractEarMojo
45 extends AbstractMojo
46 {
47 public static final String APPLICATION_XML_URI = "META-INF/application.xml";
48
49 public static final String META_INF = "META-INF";
50
51 public static final String UTF_8 = "UTF-8";
52
53
54
55
56
57
58
59 protected String version;
60
61
62
63
64
65
66 protected String encoding;
67
68
69
70
71
72
73 protected String generatedDescriptorLocation;
74
75
76
77
78
79
80
81
82 protected MavenProject project;
83
84
85
86
87
88
89 private EarModule[] modules;
90
91
92
93
94
95
96 protected PlexusConfiguration artifactTypeMappings;
97
98
99
100
101
102
103 protected String defaultLibBundleDir;
104
105
106
107
108
109
110 private Boolean includeLibInApplicationXml = Boolean.FALSE;
111
112
113
114
115
116
117
118 private String fileNameMapping;
119
120
121
122
123
124
125
126 private File workDirectory;
127
128
129
130
131
132
133 private PlexusConfiguration jboss;
134
135
136
137
138
139
140
141 private String mainArtifactId = "none";
142
143 private List<EarModule> earModules;
144
145 private List<EarModule> allModules;
146
147 private JbossConfiguration jbossConfiguration;
148
149 @SuppressWarnings( "unchecked" )
150 public void execute()
151 throws MojoExecutionException, MojoFailureException
152 {
153 final JavaEEVersion javaEEVersion = JavaEEVersion.getJavaEEVersion( version );
154 getLog().debug( "Resolving artifact type mappings ..." );
155 ArtifactTypeMappingService typeMappingService;
156 try
157 {
158 typeMappingService = new ArtifactTypeMappingService();
159 typeMappingService.configure( artifactTypeMappings );
160 }
161 catch ( EarPluginException e )
162 {
163 throw new MojoExecutionException( "Failed to initialize artifact type mappings", e );
164 }
165 catch ( PlexusConfigurationException e )
166 {
167 throw new MojoExecutionException( "Invalid artifact type mappings configuration", e );
168 }
169
170 getLog().debug( "Initializing JBoss configuration if necessary ..." );
171 try
172 {
173 initializeJbossConfiguration();
174 }
175 catch ( EarPluginException e )
176 {
177 throw new MojoExecutionException( "Failed to initialize JBoss configuration", e );
178 }
179
180 getLog().debug( "Initializing ear execution context" );
181 EarExecutionContext earExecutionContext =
182 new EarExecutionContext( project, mainArtifactId, defaultLibBundleDir, jbossConfiguration, fileNameMapping,
183 typeMappingService );
184
185 getLog().debug( "Resolving ear modules ..." );
186 allModules = new ArrayList<EarModule>();
187 try
188 {
189 if ( modules != null && modules.length > 0 )
190 {
191
192 EarModule module = null;
193
194 for ( int i = 0; i < modules.length; i++ )
195 {
196 module = modules[i];
197 getLog().debug( "Resolving ear module[" + module + "]" );
198 module.setEarExecutionContext( earExecutionContext );
199 module.resolveArtifact( project.getArtifacts() );
200 allModules.add( module );
201 }
202 }
203
204
205 Set<Artifact> artifacts = project.getArtifacts();
206 for ( Artifact artifact : artifacts )
207 {
208
209
210 if ( "pom".equals( artifact.getType() ) )
211 {
212 continue;
213 }
214
215
216
217 ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME );
218 if ( !isArtifactRegistered( artifact, allModules ) && !artifact.isOptional()
219 && filter.include( artifact ) )
220 {
221 EarModule module = EarModuleFactory.newEarModule( artifact, javaEEVersion, defaultLibBundleDir,
222 includeLibInApplicationXml, typeMappingService );
223 module.setEarExecutionContext( earExecutionContext );
224 allModules.add( module );
225 }
226 }
227 }
228 catch ( EarPluginException e )
229 {
230 throw new MojoExecutionException( "Failed to initialize ear modules", e );
231 }
232
233
234 earModules = new ArrayList<EarModule>();
235 for ( EarModule earModule : allModules )
236 {
237 if ( earModule.isExcluded() )
238 {
239 getLog().debug( "Skipping ear module[" + earModule + "]" );
240 }
241 else
242 {
243 earModules.add( earModule );
244 }
245 }
246
247 }
248
249 protected List<EarModule> getModules()
250 {
251 if ( earModules == null )
252 {
253 throw new IllegalStateException( "Ear modules have not been initialized" );
254 }
255 return earModules;
256 }
257
258 protected MavenProject getProject()
259 {
260 return project;
261 }
262
263 protected File getWorkDirectory()
264 {
265 return workDirectory;
266 }
267
268 protected JbossConfiguration getJbossConfiguration()
269 {
270 return jbossConfiguration;
271 }
272
273 private static boolean isArtifactRegistered( Artifact a, List<EarModule> currentList )
274 {
275 for( EarModule em : currentList )
276 {
277 if ( em.getArtifact().equals( a ) )
278 {
279 return true;
280 }
281 }
282 return false;
283 }
284
285
286
287
288
289
290 private void initializeJbossConfiguration()
291 throws EarPluginException
292 {
293 if ( jboss == null )
294 {
295 jbossConfiguration = null;
296 }
297 else
298 {
299 try
300 {
301 String version = jboss.getChild( JbossConfiguration.VERSION ).getValue();
302 if ( version == null )
303 {
304 getLog().info( "JBoss version not set, using JBoss 4 by default" );
305 version = JbossConfiguration.VERSION_4;
306 }
307 final String securityDomain = jboss.getChild( JbossConfiguration.SECURITY_DOMAIN ).getValue();
308 final String unauthenticatedPrincipal =
309 jboss.getChild( JbossConfiguration.UNAUHTHENTICTED_PRINCIPAL ).getValue();
310
311 final PlexusConfiguration loaderRepositoryEl = jboss.getChild( JbossConfiguration.LOADER_REPOSITORY );
312 final String loaderRepository = loaderRepositoryEl.getValue();
313 final String loaderRepositoryClass =
314 loaderRepositoryEl.getAttribute( JbossConfiguration.LOADER_REPOSITORY_CLASS_ATTRIBUTE );
315 final PlexusConfiguration loaderRepositoryConfigEl =
316 jboss.getChild( JbossConfiguration.LOADER_REPOSITORY_CONFIG );
317 final String loaderRepositoryConfig = loaderRepositoryConfigEl.getValue();
318 final String configParserClass =
319 loaderRepositoryConfigEl.getAttribute( JbossConfiguration.CONFIG_PARSER_CLASS_ATTRIBUTE );
320
321 final String jmxName = jboss.getChild( JbossConfiguration.JMX_NAME ).getValue();
322 final String moduleOrder = jboss.getChild( JbossConfiguration.MODULE_ORDER ).getValue();
323
324 final List<String> dataSources = new ArrayList<String>();
325 final PlexusConfiguration dataSourcesEl = jboss.getChild( JbossConfiguration.DATASOURCES );
326 if ( dataSourcesEl != null )
327 {
328
329 final PlexusConfiguration[] dataSourcesConfig =
330 dataSourcesEl.getChildren( JbossConfiguration.DATASOURCE );
331 for ( int i = 0; i < dataSourcesConfig.length; i++ )
332 {
333 PlexusConfiguration dataSourceConfig = dataSourcesConfig[i];
334 dataSources.add( dataSourceConfig.getValue() );
335
336 }
337 }
338 final String libraryDirectory = jboss.getChild( JbossConfiguration.LIBRARY_DIRECTORY ).getValue();
339 jbossConfiguration = new JbossConfiguration( version, securityDomain, unauthenticatedPrincipal, jmxName,
340 loaderRepository, moduleOrder, dataSources,
341 libraryDirectory, loaderRepositoryConfig,
342 loaderRepositoryClass, configParserClass );
343 }
344 catch ( PlexusConfigurationException e )
345 {
346 throw new EarPluginException( "Invalid JBoss configuration", e );
347 }
348 }
349 }
350 }