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.rad;
20
21 import java.io.File;
22 import java.util.Iterator;
23
24 import org.apache.maven.model.Resource;
25 import org.apache.maven.plugin.MojoExecutionException;
26 import org.apache.maven.plugin.eclipse.Constants;
27 import org.apache.maven.plugin.eclipse.EclipseSourceDir;
28 import org.apache.maven.plugin.eclipse.writers.AbstractEclipseManifestWriter;
29 import org.apache.maven.plugin.ide.IdeUtils;
30 import org.apache.maven.plugin.ide.JeeUtils;
31 import org.apache.maven.project.MavenProject;
32
33
34
35
36
37
38
39
40
41 public class RadManifestWriter
42 extends AbstractEclipseManifestWriter
43 {
44
45 private static final String DEFAULT_WEBAPP_RESOURCE_DIR =
46 "src" + File.separatorChar + "main" + File.separatorChar + "webapp";
47
48
49
50
51
52
53
54 protected String getMetaInfBaseDirectory( MavenProject project )
55 throws MojoExecutionException
56 {
57 String metaInfBaseDirectory = null;
58
59 if ( config.getProject().getPackaging().equals( Constants.PROJECT_PACKAGING_WAR ) )
60 {
61
62 File warSourceDirectory =
63 new File( IdeUtils.getPluginSetting( config.getProject(), JeeUtils.ARTIFACT_MAVEN_WAR_PLUGIN,
64 "warSourceDirectory",
65 DEFAULT_WEBAPP_RESOURCE_DIR ) );
66
67 String webContentDir =
68 IdeUtils.toRelativeAndFixSeparator( config.getEclipseProjectDirectory(), warSourceDirectory, false );
69
70 metaInfBaseDirectory =
71 config.getProject().getBasedir().getAbsolutePath() + File.separatorChar + webContentDir;
72
73 log.debug( "Attempting to use: " + metaInfBaseDirectory + " for location of META-INF in war project." );
74
75 File metaInfDirectoryFile = new File( metaInfBaseDirectory + File.separatorChar + META_INF_DIRECTORY );
76
77 if ( metaInfDirectoryFile.exists() && !metaInfDirectoryFile.isDirectory() )
78 {
79 metaInfBaseDirectory = null;
80 }
81 }
82
83 if ( metaInfBaseDirectory == null )
84 {
85 for ( Iterator iterator = project.getResources().iterator(); iterator.hasNext(); )
86 {
87 metaInfBaseDirectory = ( (Resource) iterator.next() ).getDirectory();
88
89 File metaInfDirectoryFile = new File( metaInfBaseDirectory + File.separatorChar + META_INF_DIRECTORY );
90
91 log.debug( "Checking for existence of META-INF directory: " + metaInfDirectoryFile );
92
93 if ( metaInfDirectoryFile.exists() && !metaInfDirectoryFile.isDirectory() )
94 {
95 metaInfBaseDirectory = null;
96 }
97 }
98 }
99
100 return metaInfBaseDirectory;
101 }
102
103
104
105
106 public void write()
107 throws MojoExecutionException
108 {
109 super.write();
110 verifyManifestBasedirInSourceDirs( getMetaInfBaseDirectory( config.getProject() ) );
111 }
112
113
114
115
116 private void verifyManifestBasedirInSourceDirs( String metaInfBaseDirectory )
117 {
118 EclipseSourceDir[] sourceDirs = config.getSourceDirs();
119
120 if ( sourceDirs != null )
121 {
122 boolean foundMetaInfBaseDirectory = false;
123
124 for ( int i = 0; i < sourceDirs.length; i++ )
125 {
126 EclipseSourceDir esd = sourceDirs[i];
127
128 if ( esd.getPath().equals( metaInfBaseDirectory ) )
129 {
130 foundMetaInfBaseDirectory = true;
131 break;
132 }
133 }
134
135 if ( !foundMetaInfBaseDirectory )
136 {
137 EclipseSourceDir dir =
138 new EclipseSourceDir( metaInfBaseDirectory, null, true, false, null, null, false );
139
140 EclipseSourceDir[] newSourceDirs = new EclipseSourceDir[sourceDirs.length + 1];
141 newSourceDirs[sourceDirs.length] = dir;
142
143 System.arraycopy( sourceDirs, 0, newSourceDirs, 0, sourceDirs.length );
144
145 config.setSourceDirs( newSourceDirs );
146 }
147 }
148 }
149 }