1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.eclipse.writers.wtp;
20
21 import java.io.File;
22
23 import org.apache.maven.artifact.repository.ArtifactRepository;
24 import org.apache.maven.plugin.MojoExecutionException;
25 import org.apache.maven.plugin.eclipse.Constants;
26 import org.apache.maven.plugin.eclipse.Messages;
27 import org.apache.maven.plugin.eclipse.writers.AbstractEclipseWriter;
28 import org.apache.maven.plugin.ide.IdeDependency;
29 import org.apache.maven.plugin.ide.IdeUtils;
30 import org.apache.maven.plugin.ide.JeeUtils;
31 import org.apache.maven.project.MavenProject;
32 import org.codehaus.plexus.util.xml.XMLWriter;
33
34
35
36
37
38
39
40 public abstract class AbstractWtpResourceWriter
41 extends AbstractEclipseWriter
42 {
43
44 private static final String ELT_DEPENDENCY_OBJECT = "dependent-object";
45
46 private static final String ELT_DEPENDENCY_TYPE = "dependency-type";
47
48 private static final String ATTR_HANDLE = "handle";
49
50 private static final String ELT_DEPENDENT_MODULE = "dependent-module";
51
52 protected static final String ATTR_VALUE = "value";
53
54 protected static final String ATTR_NAME = "name";
55
56 protected static final String ELT_PROPERTY = "property";
57
58 protected static final String ELT_VERSION = "version";
59
60 protected static final String ATTR_MODULE_TYPE_ID = "module-type-id";
61
62 protected static final String ATTR_SOURCE_PATH = "source-path";
63
64 protected static final String ATTR_DEPLOY_PATH = "deploy-path";
65
66 protected static final String ELT_WB_RESOURCE = "wb-resource";
67
68 protected static final String ELT_MODULE_TYPE = "module-type";
69
70 protected static final String ATTR_DEPLOY_NAME = "deploy-name";
71
72 protected static final String ELT_WB_MODULE = "wb-module";
73
74 protected static final String ATTR_MODULE_ID = "id";
75
76 protected static final String ATTR_PROJECT_VERSION = "project-version";
77
78 protected static final String ELT_PROJECT_MODULES = "project-modules";
79
80
81
82
83
84
85 protected void writeModuleTypeAccordingToPackaging( MavenProject project, XMLWriter writer,
86 File buildOutputDirectory )
87 throws MojoExecutionException
88 {
89 if ( Constants.PROJECT_PACKAGING_WAR.equals( config.getPackaging() ) )
90 {
91 writer.addAttribute( ATTR_MODULE_TYPE_ID, "jst.web" );
92
93 writer.startElement( ELT_VERSION );
94
95 writer.writeText( JeeUtils.resolveServletVersion( config.getProject() ) );
96 writer.endElement();
97
98 String contextRoot = config.getContextName();
99
100 writer.startElement( ELT_PROPERTY );
101 writer.addAttribute( ATTR_NAME, "context-root" );
102 writer.addAttribute( ATTR_VALUE, contextRoot );
103 writer.endElement();
104 }
105 else if ( Constants.PROJECT_PACKAGING_EJB.equals( config.getPackaging() ) )
106 {
107 writer.addAttribute( ATTR_MODULE_TYPE_ID, "jst.ejb" );
108
109 writer.startElement( ELT_VERSION );
110 writer.writeText( JeeUtils.resolveEjbVersion( config.getProject() ) );
111
112 writer.endElement();
113
114 writer.startElement( ELT_PROPERTY );
115 writer.addAttribute( ATTR_NAME, "java-output-path" );
116 writer.addAttribute( ATTR_VALUE, "/" +
117 IdeUtils.toRelativeAndFixSeparator( config.getProject().getBasedir(), buildOutputDirectory, false ) );
118 writer.endElement();
119
120 }
121 else if ( Constants.PROJECT_PACKAGING_EAR.equals( config.getPackaging() ) )
122 {
123 writer.addAttribute( ATTR_MODULE_TYPE_ID, "jst.ear" );
124
125 writer.startElement( ELT_VERSION );
126 writer.writeText( JeeUtils.resolveJeeVersion( config.getProject() ) );
127 writer.endElement();
128 }
129 else
130 {
131
132 writer.addAttribute( ATTR_MODULE_TYPE_ID, "jst.utility" );
133
134 writer.startElement( ELT_PROPERTY );
135 writer.addAttribute( ATTR_NAME, "java-output-path" );
136 writer.addAttribute( ATTR_VALUE, "/" +
137 IdeUtils.toRelativeAndFixSeparator( config.getProject().getBasedir(), buildOutputDirectory, false ) );
138 writer.endElement();
139 }
140 }
141
142
143
144
145
146
147
148
149
150
151 protected void addDependency( XMLWriter writer, IdeDependency dep, ArtifactRepository localRepository,
152 File basedir, String deployPath )
153 throws MojoExecutionException
154 {
155 String handle;
156 String dependentObject = null;
157 String archiveName;
158
159
160 if ( Constants.PROJECT_PACKAGING_WAR.equals( dep.getType() )
161 || Constants.PROJECT_PACKAGING_EJB.equals( dep.getType() ) )
162 {
163 deployPath = "/";
164 }
165
166 if ( dep.isReferencedProject() )
167 {
168
169
170
171
172
173 handle = "module:/resource/" + dep.getEclipseProjectName() + "/" + dep.getEclipseProjectName();
174
175 String archiveExtension = dep.getType();
176 if ( Constants.PROJECT_PACKAGING_EJB.equals( dep.getType() ) )
177 {
178 dependentObject = "EjbModule_";
179
180 archiveExtension = Constants.PROJECT_PACKAGING_JAR;
181 }
182 else if ( Constants.PROJECT_PACKAGING_WAR.equals( dep.getType() ) )
183 {
184 dependentObject = "WebModule_";
185 }
186 archiveName = dep.getEclipseProjectName() + "." + archiveExtension;
187 }
188 else
189 {
190
191
192
193
194
195 File artifactPath = dep.getFile();
196
197 if ( artifactPath == null )
198 {
199 log.error( Messages.getString( "EclipsePlugin.artifactpathisnull", dep.getId() ) );
200 return;
201 }
202
203 String fullPath = artifactPath.getPath();
204 File repoFile = new File( fullPath );
205
206 if ( dep.isSystemScoped() )
207 {
208 handle = "module:/classpath/lib/"
209 + IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), repoFile, false );
210 }
211 else
212 {
213 File localRepositoryFile = new File( localRepository.getBasedir() );
214 String relativePath = IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, repoFile, false );
215
216 if ( !new File( relativePath ).isAbsolute() )
217 {
218 handle = "module:/classpath/var/M2_REPO/"
219 + relativePath;
220 }
221 else
222 {
223 handle = "module:/classpath/lib/"
224 + IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), repoFile, false );
225 }
226 }
227 if ( Constants.PROJECT_PACKAGING_EAR.equals( this.config.getPackaging() ) && !"/".equals( deployPath ) )
228 {
229
230
231
232 archiveName = "../" + artifactPath.getName();
233 }
234 else
235 {
236 archiveName = artifactPath.getName();
237 }
238 }
239
240 writer.startElement( ELT_DEPENDENT_MODULE );
241
242 writer.addAttribute( "archiveName", archiveName );
243
244 writer.addAttribute( ATTR_DEPLOY_PATH, deployPath );
245 writer.addAttribute( ATTR_HANDLE, handle );
246
247 if ( dependentObject != null && config.getWtpVersion() >= 2.0f )
248 {
249 writer.startElement( ELT_DEPENDENCY_OBJECT );
250 writer.writeText( dependentObject + System.identityHashCode( dep ) );
251 writer.endElement();
252 }
253
254 writer.startElement( ELT_DEPENDENCY_TYPE );
255 writer.writeText( "uses" );
256 writer.endElement();
257
258 writer.endElement();
259 }
260
261 protected void writeWarOrEarResources( XMLWriter writer, MavenProject project, ArtifactRepository localRepository )
262 throws MojoExecutionException
263 {
264
265 String deployDir =
266 IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_EAR_PLUGIN, "defaultLibBundleDir",
267 "/" );
268
269 if ( project.getPackaging().equals( Constants.PROJECT_PACKAGING_WAR ) )
270 {
271 deployDir = "/WEB-INF/lib";
272 }
273
274 for ( int j = 0; j < config.getDepsOrdered().length; j++ )
275 {
276 IdeDependency dep = config.getDepsOrdered()[j];
277 String type = dep.getType();
278
279
280
281 if ( ( !dep.isTestDependency() && !dep.isProvided() && !dep.isSystemScopedOutsideProject( project ) )
282 && ( Constants.PROJECT_PACKAGING_JAR.equals( type ) || Constants.PROJECT_PACKAGING_EJB.equals( type )
283 || "ejb-client".equals( type ) || Constants.PROJECT_PACKAGING_WAR.equals( type ) ) )
284 {
285 addDependency( writer, dep, localRepository, config.getProject().getBasedir(), deployDir );
286 }
287 }
288 }
289
290 }