forked from I2P_Developers/i2p.i2p
* FileUtil: Make it easier to compile without Pack200, or with
Apache Harmony's Pack200, add unzip to main()
This commit is contained in:
@ -6,6 +6,14 @@
|
|||||||
<!--
|
<!--
|
||||||
<property name="javac.compilerargs" value="-warn:-unchecked,raw,unused,serial" />
|
<property name="javac.compilerargs" value="-warn:-unchecked,raw,unused,serial" />
|
||||||
-->
|
-->
|
||||||
|
<!-- Add Apache Harmony's Pack200 library if you don't have java.util.jar.Pack200
|
||||||
|
See core/java/src/net/i2p/util/FileUtil.java for code changes required
|
||||||
|
to use this library instead of Sun's version.
|
||||||
|
Or to comment it all out if you don't have either.
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
<property name="javac.classpath" value="/PATH/TO/pack200.jar" />
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- You probably don't want to change anything from here down -->
|
<!-- You probably don't want to change anything from here down -->
|
||||||
<target name="help" depends="all" />
|
<target name="help" depends="all" />
|
||||||
|
@ -17,10 +17,11 @@
|
|||||||
</target>
|
</target>
|
||||||
<!-- only used if not set by a higher build.xml -->
|
<!-- only used if not set by a higher build.xml -->
|
||||||
<property name="javac.compilerargs" value="" />
|
<property name="javac.compilerargs" value="" />
|
||||||
|
<property name="javac.classpath" value="" />
|
||||||
<target name="compile" depends="depend">
|
<target name="compile" depends="depend">
|
||||||
<mkdir dir="./build" />
|
<mkdir dir="./build" />
|
||||||
<mkdir dir="./build/obj" />
|
<mkdir dir="./build/obj" />
|
||||||
<javac srcdir="./src" debug="true" source="1.5" target="1.5" deprecation="on" destdir="./build/obj" >
|
<javac srcdir="./src" debug="true" source="1.5" target="1.5" deprecation="on" destdir="./build/obj" classpath="${javac.classpath}" >
|
||||||
<compilerarg line="${javac.compilerargs}" />
|
<compilerarg line="${javac.compilerargs}" />
|
||||||
</javac>
|
</javac>
|
||||||
</target>
|
</target>
|
||||||
|
@ -13,10 +13,18 @@ import java.util.ArrayList;
|
|||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.jar.JarOutputStream;
|
import java.util.jar.JarOutputStream;
|
||||||
import java.util.jar.Pack200;
|
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
|
|
||||||
|
// Pack200 import
|
||||||
|
// you must also uncomment the correct line in unpack() below
|
||||||
|
// For gcj, gij, etc., comment both out
|
||||||
|
//
|
||||||
|
// For Sun, OpenJDK, IcedTea, etc, use this
|
||||||
|
import java.util.jar.Pack200;
|
||||||
|
|
||||||
|
// For Apache Harmony or if you put its pack200.jar in your library directory use this
|
||||||
|
//import org.apache.harmony.unpack200.Archive;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General helper methods for messing with files
|
* General helper methods for messing with files
|
||||||
@ -119,7 +127,7 @@ public class FileUtil {
|
|||||||
if (entry.getName().endsWith(".jar.pack") || entry.getName().endsWith(".war.pack")) {
|
if (entry.getName().endsWith(".jar.pack") || entry.getName().endsWith(".war.pack")) {
|
||||||
target = new File(targetDir, entry.getName().substring(0, entry.getName().length() - ".pack".length()));
|
target = new File(targetDir, entry.getName().substring(0, entry.getName().length() - ".pack".length()));
|
||||||
JarOutputStream fos = new JarOutputStream(new FileOutputStream(target));
|
JarOutputStream fos = new JarOutputStream(new FileOutputStream(target));
|
||||||
Pack200.newUnpacker().unpack(in, fos);
|
unpack(in, fos);
|
||||||
fos.close();
|
fos.close();
|
||||||
System.err.println("INFO: File [" + entry.getName() + "] extracted and unpacked");
|
System.err.println("INFO: File [" + entry.getName() + "] extracted and unpacked");
|
||||||
} else {
|
} else {
|
||||||
@ -189,9 +197,7 @@ public class FileUtil {
|
|||||||
} else {
|
} else {
|
||||||
if (p200TestRequired &&
|
if (p200TestRequired &&
|
||||||
(entry.getName().endsWith(".jar.pack") || entry.getName().endsWith(".war.pack"))) {
|
(entry.getName().endsWith(".jar.pack") || entry.getName().endsWith(".war.pack"))) {
|
||||||
try {
|
if (!isPack200Supported()) {
|
||||||
Class.forName("java.util.jar.Pack200", false, ClassLoader.getSystemClassLoader());
|
|
||||||
} catch (Exception e) { // ClassNotFoundException but compiler not happy with that
|
|
||||||
System.err.println("ERROR: Zip verify failed, your JVM does not support unpack200");
|
System.err.println("ERROR: Zip verify failed, your JVM does not support unpack200");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -224,6 +230,40 @@ public class FileUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This won't work right if one of the two options in unpack() is commented out.
|
||||||
|
* @since 0.8.1
|
||||||
|
*/
|
||||||
|
private static boolean isPack200Supported() {
|
||||||
|
try {
|
||||||
|
Class.forName("java.util.jar.Pack200", false, ClassLoader.getSystemClassLoader());
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {}
|
||||||
|
try {
|
||||||
|
Class.forName("org.apache.harmony.pack200.Archive", false, ClassLoader.getSystemClassLoader());
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caller must close streams
|
||||||
|
* @since 0.8.1
|
||||||
|
*/
|
||||||
|
private static void unpack(InputStream in, JarOutputStream out) throws Exception {
|
||||||
|
// For Sun, OpenJDK, IcedTea, etc, use this
|
||||||
|
Pack200.newUnpacker().unpack(in, out);
|
||||||
|
|
||||||
|
// ------------------
|
||||||
|
// For Apache Harmony or if you put its pack200.jar in your library directory use this
|
||||||
|
//(new Archive(in, out)).unpack();
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------
|
||||||
|
// For gcj, gij, etc., use this
|
||||||
|
//throw new IOException("Pack200 not supported");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read in the last few lines of a (newline delimited) textfile, or null if
|
* Read in the last few lines of a (newline delimited) textfile, or null if
|
||||||
* the file doesn't exist.
|
* the file doesn't exist.
|
||||||
@ -352,6 +392,18 @@ public class FileUtil {
|
|||||||
boolean copied = FileUtil.copy(args[1], args[2], false);
|
boolean copied = FileUtil.copy(args[1], args[2], false);
|
||||||
if (!copied)
|
if (!copied)
|
||||||
System.err.println("Error copying [" + args[1] + "] to [" + args[2] + "]");
|
System.err.println("Error copying [" + args[1] + "] to [" + args[2] + "]");
|
||||||
|
} else if ("unzip".equals(args[0])) {
|
||||||
|
File f = new File(args[1]);
|
||||||
|
File to = new File("tmp");
|
||||||
|
to.mkdir();
|
||||||
|
boolean copied = verifyZip(f);
|
||||||
|
if (!copied)
|
||||||
|
System.err.println("Error verifying " + args[1]);
|
||||||
|
copied = extractZip(f, to);
|
||||||
|
if (copied)
|
||||||
|
System.err.println("Unzipped [" + args[1] + "] to [" + to + "]");
|
||||||
|
else
|
||||||
|
System.err.println("Error unzipping [" + args[1] + "] to [" + to + "]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user