conor 2003/03/22 01:39:46
Modified: src/main/org/apache/tools/ant/loader AntClassLoader2.java
docs/manual/CoreTasks jar.html manifest.html
src/main/org/apache/tools/ant/taskdefs Jar.java
ManifestTask.java
Log:
Add manifest encoding options to control the encoding used to read in
manifests
PR: 17634
Revision Changes Path
1.6 +2 -1
ant/src/main/org/apache/tools/ant/loader/AntClassLoader2.java
Index: AntClassLoader2.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/loader/AntClassLoader2.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -w -u -r1.5 -r1.6
--- AntClassLoader2.java 10 Feb 2003 14:13:34 -0000 1.5
+++ AntClassLoader2.java 22 Mar 2003 09:39:46 -0000 1.6
@@ -283,7 +283,8 @@
if (manifestStream == null) {
return;
}
- Reader manifestReader = new InputStreamReader(manifestStream);
+ Reader manifestReader
+ = new InputStreamReader(manifestStream, "UTF-8");
org.apache.tools.ant.taskdefs.Manifest manifest
= new org.apache.tools.ant.taskdefs.Manifest(manifestReader);
classpath
1.25 +5 -0 ant/docs/manual/CoreTasks/jar.html
Index: jar.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTasks/jar.html,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -w -u -r1.24 -r1.25
--- jar.html 7 Mar 2003 14:48:52 -0000 1.24
+++ jar.html 22 Mar 2003 09:39:46 -0000 1.25
@@ -151,6 +151,11 @@
<td valign="top">whether to create an <A
HREF="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#JAR%20Index">index
list</A> to speed up classloading. This is a JDK 1.3+ specific feature.
Defaults to false. </td>
<td valign="top" align="center">No</td>
</tr>
+ <tr>
+ <td valign="top">manifestencoding</td>
+ <td valign="top">The encoding used to read the JAR manifest, when a
manifest file is specified.</td>
+ <td valign="top" align="center">No, defaults to the platform
encoding.</td>
+ </tr>
</table>
<h3>Nested elements</h3>
1.7 +5 -0 ant/docs/manual/CoreTasks/manifest.html
Index: manifest.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/CoreTasks/manifest.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -u -r1.6 -r1.7
--- manifest.html 4 Sep 2002 11:05:16 -0000 1.6
+++ manifest.html 22 Mar 2003 09:39:46 -0000 1.7
@@ -39,6 +39,11 @@
<td valign="top">One of "update" or "replace", default is "replace".</td>
<td valign="top" align="center">No</td>
</tr>
+ <tr>
+ <td valign="top">encoding</td>
+ <td valign="top">The encoding used to read the existing manifest when
updating.</td>
+ <td valign="top" align="center">No, defaults to UTF-8 encoding.</td>
+ </tr>
</table>
<h3>Nested elements</h3>
1.72 +45 -7 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.71
retrieving revision 1.72
diff -u -w -u -r1.71 -r1.72
--- Jar.java 12 Mar 2003 11:23:27 -0000 1.71
+++ Jar.java 22 Mar 2003 09:39:46 -0000 1.72
@@ -61,6 +61,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
@@ -124,6 +125,9 @@
/** the manifest specified by the 'manifest' attribute **/
private Manifest manifest;
+ /** The encoding to use when reading in a manifest file */
+ private String manifestEncoding;
+
/**
* The file found from the 'manifest' attribute. This can be
* either the location of a manifest, or the name of a jar added
@@ -173,6 +177,14 @@
}
/**
+ * Set whether or not to create an index list for classes.
+ * This may speed up classloading in some cases.
+ */
+ public void setManifestEncoding(String manifestEncoding) {
+ this.manifestEncoding = manifestEncoding;
+ }
+
+ /**
* Allows the manifest for the archive file to be provided inline
* in the build file rather than in an external file.
*
@@ -212,8 +224,15 @@
InputStreamReader isr = null;
try {
fis = new FileInputStream(manifestFile);
- isr = new InputStreamReader(fis, "UTF-8");
+ if (manifestEncoding == null) {
+ isr = new InputStreamReader(fis);
+ } else {
+ isr = new InputStreamReader(fis, manifestEncoding);
+ }
newManifest = getManifest(isr);
+ } catch (UnsupportedEncodingException e) {
+ throw new BuildException("Unsupported encoding while reading
manifest: "
+ + e.getMessage(), e);
} catch (IOException e) {
throw new BuildException("Unable to read manifest file: "
+ manifestFile
@@ -466,11 +485,22 @@
// If this is the same name specified in 'manifest', this
// is the manifest to use
log("Found manifest " + file, Project.MSG_VERBOSE);
+ try {
if (is != null) {
- manifest = getManifest(new InputStreamReader(is, "UTF-8"));
+ InputStreamReader isr;
+ if (manifestEncoding == null) {
+ isr = new InputStreamReader(is);
+ } else {
+ isr = new InputStreamReader(is, manifestEncoding);
+ }
+ manifest = getManifest(isr);
} else {
manifest = getManifest(file);
}
+ } catch (UnsupportedEncodingException e) {
+ throw new BuildException("Unsupported encoding while reading
"
+ + "manifest: " + e.getMessage(), e);
+ }
} else if (filesetManifestConfig != null &&
!filesetManifestConfig.getValue().equals("skip")) {
// we add this to our group of fileset manifests
@@ -480,8 +510,13 @@
try {
Manifest newManifest = null;
if (is != null) {
- newManifest
- = getManifest(new InputStreamReader(is, "UTF-8"));
+ InputStreamReader isr;
+ if (manifestEncoding == null) {
+ isr = new InputStreamReader(is);
+ } else {
+ isr = new InputStreamReader(is, manifestEncoding);
+ }
+ newManifest = getManifest(isr);
} else {
newManifest = getManifest(file);
}
@@ -491,6 +526,9 @@
} else {
filesetManifest.merge(newManifest);
}
+ } catch (UnsupportedEncodingException e) {
+ throw new BuildException("Unsupported encoding while reading
"
+ + "manifest: " + e.getMessage(), e);
} catch (ManifestException e) {
log("Manifest in file " + file + " is invalid: "
+ e.getMessage(), Project.MSG_ERR);
1.8 +18 -1
ant/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
Index: ManifestTask.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -w -u -r1.7 -r1.8
--- ManifestTask.java 7 Mar 2003 11:23:02 -0000 1.7
+++ ManifestTask.java 22 Mar 2003 09:39:46 -0000 1.8
@@ -97,6 +97,11 @@
private Mode mode;
/**
+ * The encoding of the manifest file
+ */
+ private String encoding;
+
+ /**
* Helper class for Manifest's mode attribute.
*/
public static class Mode extends EnumeratedAttribute {
@@ -149,6 +154,14 @@
}
/**
+ * The encoding to use for reading in an existing manifest file
+ * @param encoding the maniofets file encoding.
+ */
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ /**
* Update policy: either "update" or "replace"; default is "replace".
* @param m the mode value - update or replace.
*/
@@ -175,7 +188,11 @@
InputStreamReader isr = null;
try {
fis = new FileInputStream(manifestFile);
+ if (encoding == null) {
isr = new InputStreamReader(fis, "UTF-8");
+ } else {
+ isr = new InputStreamReader(fis, encoding);
+ }
current = new Manifest(isr);
} catch (ManifestException m) {
error = new BuildException("Existing manifest " +
manifestFile