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 if ( Constants.PROJECT_PACKAGING_EJB.equals( dep.getType() ) )
175 {
176 dependentObject = "EjbModule_";
177 }
178 else if ( Constants.PROJECT_PACKAGING_WAR.equals( dep.getType() ) )
179 {
180 dependentObject = "WebModule_";
181 }
182 archiveName = dep.getEclipseProjectName() + "." + dep.getType();
183 }
184 else
185 {
186
187
188
189
190
191 File artifactPath = dep.getFile();
192
193 if ( artifactPath == null )
194 {
195 log.error( Messages.getString( "EclipsePlugin.artifactpathisnull", dep.getId() ) );
196 return;
197 }
198
199 String fullPath = artifactPath.getPath();
200 File repoFile = new File( fullPath );
201
202 if ( dep.isSystemScoped() )
203 {
204 handle = "module:/classpath/lib/"
205 + IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), repoFile, false );
206 }
207 else
208 {
209 File localRepositoryFile = new File( localRepository.getBasedir() );
210 String relativePath = IdeUtils.toRelativeAndFixSeparator( localRepositoryFile, repoFile, false );
211
212 if ( !new File( relativePath ).isAbsolute() )
213 {
214 handle = "module:/classpath/var/M2_REPO/"
215 + relativePath;
216 }
217 else
218 {
219 handle = "module:/classpath/lib/"
220 + IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), repoFile, false );
221 }
222 }
223 if ( Constants.PROJECT_PACKAGING_EAR.equals( this.config.getPackaging() ) && !"/".equals( deployPath ) )
224 {
225
226
227
228 archiveName = "../" + artifactPath.getName();
229 }
230 else
231 {
232 archiveName = artifactPath.getName();
233 }
234 }
235
236 writer.startElement( ELT_DEPENDENT_MODULE );
237
238 writer.addAttribute( "archiveName", archiveName );
239
240 writer.addAttribute( ATTR_DEPLOY_PATH, deployPath );
241 writer.addAttribute( ATTR_HANDLE, handle );
242
243 if ( dependentObject != null && config.getWtpVersion() >= 2.0f )
244 {
245 writer.startElement( ELT_DEPENDENCY_OBJECT );
246 writer.writeText( dependentObject + System.identityHashCode( dep ) );
247 writer.endElement();
248 }
249
250 writer.startElement( ELT_DEPENDENCY_TYPE );
251 writer.writeText( "uses" );
252 writer.endElement();
253
254 writer.endElement();
255 }
256
257 protected void writeWarOrEarResources( XMLWriter writer, MavenProject project, ArtifactRepository localRepository )
258 throws MojoExecutionException
259 {
260
261 String deployDir =
262 IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_EAR_PLUGIN, "defaultLibBundleDir",
263 "/" );
264
265 if ( project.getPackaging().equals( Constants.PROJECT_PACKAGING_WAR ) )
266 {
267 deployDir = "/WEB-INF/lib";
268 }
269
270 for ( int j = 0; j < config.getDepsOrdered().length; j++ )
271 {
272 IdeDependency dep = config.getDepsOrdered()[j];
273 String type = dep.getType();
274
275
276
277 if ( ( !dep.isTestDependency() && !dep.isProvided() && !dep.isSystemScopedOutsideProject( project ) )
278 && ( Constants.PROJECT_PACKAGING_JAR.equals( type ) || Constants.PROJECT_PACKAGING_EJB.equals( type )
279 || "ejb-client".equals( type ) || Constants.PROJECT_PACKAGING_WAR.equals( type ) ) )
280 {
281 addDependency( writer, dep, localRepository, config.getProject().getBasedir(), deployDir );
282 }
283 }
284 }
285
286 }