I used to build a jar file (or any zip-format file: war, ear, etc.),
which contents are extracted from other zip files. For instance,
zip file src.zip contains:
+---main
| \---org
| \---apache
| Test.java
|
\---test
I just want the subtree under "main" (not include main directory) to be
packed into my jar file:
+---org
\---apache
Test.java
So I wrote a build.xml to do this:
<project default="src-jar">
<target name="src-jar">
<jar destfile="my-src.jar">
<zipfileset src="src.zip" includes="main/"/>
</jar>
</target>
</project>
But the result is not as expected:
+---main // I don't want this directory here
\---org
\---apache
Test.java
In order to take off the "main" directory, I modified some Ant classes.
Attachment is the patch file from Ant 1.7.0 source.
Usage:
<project default="src-jar">
<target name="src-jar">
<jar destfile="my-src.jar">
<!-- basedir instead of includes -->
<zipfileset src="src.zip" basedir="main/"/>
</jar>
</target>
</project>
This is not the best solution I think. Because it doesn't support tasks
other than "zip", "jar", "war". For example, the following build script
won't work:
<project default="copy-src">
<target name="copy-src">
<copy destfile="srcdir">
<zipfileset src="src.zip" basedir="main/"/>
</copy>
</target>
</project>
I suggest to improve class org.apache.tools.zip.ZipFile to support new zip
file format like "src.zip!/main". By this way, any tasks use zipfileset
do not need to be changed.
For example,
<project default="copy-src">
<target name="copy-src">
<copy destfile="srcdir">
<zipfileset src="src.zip!/main" includes="**/*.java"/>
</copy>
</target>
</project>
Michael Zhou <[EMAIL PROTECTED]>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]