bodewig 2005/03/11 00:41:41
Modified: . WHATSNEW
src/main/org/apache/tools/ant/taskdefs Jar.java Zip.java
src/main/org/apache/tools/zip ExtraFieldUtils.java
Added: src/main/org/apache/tools/zip JarMarker.java
Log:
Make Solaris detect Ant jar files as jar files, PR: 32649
Revision Changes Path
1.771 +3 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.770
retrieving revision 1.771
diff -u -r1.770 -r1.771
--- WHATSNEW 10 Mar 2005 21:16:07 -0000 1.770
+++ WHATSNEW 11 Mar 2005 08:41:41 -0000 1.771
@@ -253,6 +253,9 @@
* Add else attribute to the condition task, which specifies an
optional alternate value to set the property to if the nested
condition evaluates to false. Bugzilla report 33074.
+
+* Ant generated jar files should now be detected as jar files by
+ Solaris. Bugzilla Report 32649.
Fixed bugs:
-----------
1.89 +14 -2 ant/src/main/org/apache/tools/ant/taskdefs/Jar.java
Index: Jar.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Jar.java,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -r1.88 -r1.89
--- Jar.java 22 Nov 2004 09:23:27 -0000 1.88
+++ Jar.java 11 Mar 2005 08:41:41 -0000 1.89
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2004 The Apache Software Foundation
+ * Copyright 2000-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,6 +47,8 @@
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.ZipFileSet;
+import org.apache.tools.zip.JarMarker;
+import org.apache.tools.zip.ZipExtraField;
import org.apache.tools.zip.ZipOutputStream;
/**
@@ -130,6 +132,15 @@
*/
private Path indexJars;
+ /**
+ * Extra fields needed to make Solaris recognize the archive as a jar
file.
+ *
+ * @since Ant 1.6.3
+ */
+ private ZipExtraField[] JAR_MARKER = new ZipExtraField[] {
+ JarMarker.getInstance()
+ };
+
/** constructor */
public Jar() {
super();
@@ -382,7 +393,8 @@
Project.MSG_WARN);
}
- zipDir(null, zOut, "META-INF/", ZipFileSet.DEFAULT_DIR_MODE);
+ zipDir(null, zOut, "META-INF/", ZipFileSet.DEFAULT_DIR_MODE,
+ JAR_MARKER);
// time to write the manifest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");
1.139 +22 -1 ant/src/main/org/apache/tools/ant/taskdefs/Zip.java
Index: Zip.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Zip.java,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -r1.138 -r1.139
--- Zip.java 1 Mar 2005 09:48:36 -0000 1.138
+++ Zip.java 11 Mar 2005 08:41:41 -0000 1.139
@@ -47,6 +47,7 @@
import org.apache.tools.ant.util.MergingMapper;
import org.apache.tools.ant.util.ResourceUtils;
import org.apache.tools.zip.ZipEntry;
+import org.apache.tools.zip.ZipExtraField;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
@@ -1030,6 +1031,22 @@
protected void zipDir(File dir, ZipOutputStream zOut, String vPath,
int mode)
throws IOException {
+ zipDir(dir, zOut, vPath, mode, null);
+ }
+
+ /**
+ * Add a directory to the zip stream.
+ * @param dir the directort to add to the archive
+ * @param zOut the stream to write to
+ * @param vPath the name this entry shall have in the archive
+ * @param mode the Unix permissions to set.
+ * @param extra ZipExtraFields to add
+ * @throws IOException on error
+ * @since Ant 1.6.3
+ */
+ protected void zipDir(File dir, ZipOutputStream zOut, String vPath,
+ int mode, ZipExtraField[] extra)
+ throws IOException {
if (addedDirs.get(vPath) != null) {
// don't add directories we've already added.
// no warning if we try, it is harmless in and of itself
@@ -1054,7 +1071,11 @@
ze.setCrc (EMPTY_CRC);
ze.setUnixMode(mode);
- zOut.putNextEntry (ze);
+ if (extra != null) {
+ ze.setExtraFields(extra);
+ }
+
+ zOut.putNextEntry(ze);
}
}
1.13 +1 -0 ant/src/main/org/apache/tools/zip/ExtraFieldUtils.java
Index: ExtraFieldUtils.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/zip/ExtraFieldUtils.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ExtraFieldUtils.java 9 Mar 2005 00:20:39 -0000 1.12
+++ ExtraFieldUtils.java 11 Mar 2005 08:41:41 -0000 1.13
@@ -37,6 +37,7 @@
static {
implementations = new Hashtable();
register(AsiExtraField.class);
+ register(JarMarker.class);
}
/**
1.1 ant/src/main/org/apache/tools/zip/JarMarker.java
Index: JarMarker.java
===================================================================
/*
* Copyright 2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.zip;
import java.util.zip.ZipException;
/**
* If this extra field is added as the very first extra field of the
* archive, Solaris will consider it an executable jar file.
*
* @since Ant 1.6.3
*/
public final class JarMarker implements ZipExtraField {
private static ZipShort ID = new ZipShort(0xCAFE);
private static ZipShort NULL = new ZipShort(0);
private static byte[] NO_BYTES = new byte[0];
private static JarMarker DEFAULT = new JarMarker();
public JarMarker() {
// empty
}
/**
* Since JarMarker is stateless we can always use the same instance.
*/
public static JarMarker getInstance() {
return DEFAULT;
}
/**
* The Header-ID.
* @return the header id
*/
public ZipShort getHeaderId() {
return ID;
}
/**
* Length of the extra field in the local file data - without
* Header-ID or length specifier.
* @return 0
*/
public ZipShort getLocalFileDataLength() {
return NULL;
}
/**
* Length of the extra field in the central directory - without
* Header-ID or length specifier.
* @return 0
*/
public ZipShort getCentralDirectoryLength() {
return NULL;
}
/**
* The actual data to put into local file data - without Header-ID
* or length specifier.
* @return the data
* @since 1.1
*/
public byte[] getLocalFileDataData() {
return NO_BYTES;
}
/**
* The actual data to put central directory - without Header-ID or
* length specifier.
* @return the data
*/
public byte[] getCentralDirectoryData() {
return NO_BYTES;
}
/**
* Populate data from this array as if it was in local file data.
* @param data an array of bytes
* @param offset the start offset
* @param length the number of bytes in the array from offset
*
* @throws ZipException on error
*/
public void parseFromLocalFileData(byte[] data, int offset, int length)
throws ZipException {
if (length != 0) {
throw new ZipException("JarMarker doesn't expect any data");
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]