You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by co...@apache.org on 2001/06/26 13:05:33 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ejb EjbJar.java GenericDeploymentTool.java
conor 01/06/26 04:05:30
Modified: src/main/org/apache/tools/ant/taskdefs/optional/ejb
EjbJar.java GenericDeploymentTool.java
Log:
Allow the manifest to be specified in the ejbjar task. This adds the given manifest
to the generic jar fed to the appserver ejb compiler.
PR: 980
Submitted by: robert.watkins@qsipayments.com (Robert Watkins)
Revision Changes Path
1.21 +18 -0 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java
Index: EjbJar.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- EjbJar.java 2001/06/25 15:17:30 1.20
+++ EjbJar.java 2001/06/26 11:05:13 1.21
@@ -167,6 +167,11 @@
* from the descriptor information
*/
public NamingScheme namingScheme;
+
+ /**
+ * The Manifest file
+ */
+ public File manifest;
};
@@ -303,6 +308,19 @@
return supportFileSet;
}
+
+ /**
+ * Set the Manifest file to use when jarring.
+ *
+ * As of EJB 1.1, manifest files are no longer used to configure the EJB. However, they
+ * still have a vital importance if the EJB is intended to be packaged in an EAR file.
+ * By adding "Class-Path" settings to a Manifest file, the EJB can look for classes inside
+ * the EAR file itself, allowing for easier deployment. This is outlined in the J2EE
+ * specification, and all J2EE components are meant to support it.
+ */
+ public void setManifest(File manifest) {
+ config.manifest = manifest;
+ }
/**
* Set the srcdir attribute. The source directory is the directory that contains
1.20 +43 -16 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
Index: GenericDeploymentTool.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- GenericDeploymentTool.java 2001/06/25 15:17:31 1.19
+++ GenericDeploymentTool.java 2001/06/26 11:05:17 1.20
@@ -570,7 +570,7 @@
* This method checks the timestamp on each file listed in the <code>
* ejbFiles</code> and compares them to the timestamp on the <code>jarFile
* </code>. If the <code>jarFile</code>'s timestamp is more recent than
- * each EJB file, <code>false</code> is returned. Otherwise, <code>true
+ * each EJB file, <code>true</code> is returned. Otherwise, <code>false
* </code> is returned.
*
* @param ejbFiles Hashtable of EJB classes (and other) files that will be
@@ -581,28 +581,32 @@
* is up to date
*/
protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) {
- // By default we assume we need to build.
- boolean needBuild = true;
-
if (jarFile.exists()) {
- long lastBuild = jarFile.lastModified();
+ long lastBuild = jarFile.lastModified();
+ if (config.manifest != null && config.manifest.exists() &&
+ config.manifest.lastModified() > lastBuild) {
+ log("Build needed because manifest " + config.manifest + " is out of date",
+ Project.MSG_VERBOSE);
+ return true;
+ }
+
+
Iterator fileIter = ejbFiles.values().iterator();
- // Set the need build to false until we find out otherwise.
- needBuild = false;
// Loop through the files seeing if any has been touched
// more recently than the destination jar.
- while( (needBuild == false) && (fileIter.hasNext()) ) {
+ while(fileIter.hasNext()) {
File currentFile = (File) fileIter.next();
- needBuild = ( lastBuild < currentFile.lastModified() );
- if (needBuild) {
+ if (lastBuild < currentFile.lastModified()) {
log("Build needed because " + currentFile.getPath() + " is out of date",
Project.MSG_VERBOSE);
+ return true;
}
}
+ return false;
}
- return needBuild;
+ return true;
}
/**
@@ -640,13 +644,36 @@
jarfile.getParentFile().mkdirs();
jarfile.createNewFile();
- String defaultManifest = "/org/apache/tools/ant/defaultManifest.mf";
- InputStream in = this.getClass().getResourceAsStream(defaultManifest);
- if ( in == null ) {
- throw new BuildException ( "Could not find: " + defaultManifest );
+ InputStream in = null;
+ Manifest manifest = null;
+ try {
+ if (config.manifest != null) {
+ in = new FileInputStream(config.manifest);
+ if ( in == null ) {
+ throw new BuildException("Could not find manifest file: " + config.manifest,
+ getLocation());
+ }
+ }
+ else {
+ String defaultManifest = "/org/apache/tools/ant/defaultManifest.mf";
+ in = this.getClass().getResourceAsStream(defaultManifest);
+ if ( in == null ) {
+ throw new BuildException("Could not find default manifest: " + defaultManifest,
+ getLocation());
+ }
+ }
+
+ manifest = new Manifest(in);
+ }
+ catch (IOException e) {
+ throw new BuildException ("Unable to read manifest", e, getLocation());
+ }
+ finally {
+ if (in != null) {
+ in.close();
+ }
}
- Manifest manifest = new Manifest(in);
// Create the streams necessary to write the jarfile
jarStream = new JarOutputStream(new FileOutputStream(jarfile), manifest);