How to write an ant task that removes files from a previously compiled JAR?
Let\'s say the files in my JAR are:
aaa/bbb/ccc/Class1
aaa/bbb/ccc/Class2
The answers didn't quite add up for me -
<zip destfile="tmp.jar">
<zipfileset src="src.jar">
<exclude name="**/*.class" />
</zipfileset>
</zip>
<move file="tmp.jar" tofile="src.jar" />
This uses a single pass and doesn't add too much time to the build
source : http://ant.1045680.n5.nabble.com/Remove-entru-from-ZIP-file-using-ANT-td1353728.html
You have to unjar and rejar.
<unzip src="myjar.jar" dest="/classes/">
<jar destfile="newjar.jar"
basedir="/classes/"
includes="**/*"
excludes="**/def/*"
/>
I came here looking to use ant as a workaround some short comings in gradle unzip.
On the off chance someone else is in the same boat.
Here is an example:
task antUnzip() << {
ant.jar(destfile : "stripped.jar") {
zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") {
}
}
}
I am not sure if there a direct solution for your requirement. I would recommend to explode the jar to some temp directory and then remove unwanted class files. Finally create a new jar with required class files.
Reference links:
http://ant.apache.org/manual/Tasks/unzip.html
http://ant.apache.org/manual/Tasks/delete.html
http://ant.apache.org/manual/Tasks/jar.html
If a jar-file capable archiver program, like e.g. "zip" on Linux, is available, the task can be done by
<exec executable="zip"> <arg value="-d"/> <arg value="myJarCopyToStrip.jar"/> <arg value="aaa/bbb/def/*> <arg value="aaa/bbb/def> </exec>
Subtree deletion depends on the capabilities of the used archiver.
The "os" attribute of the Ant "exec" task allows to use different archivers on different OS's.
Have you tried using the zipfileset
task?
<jar destfile="stripped.jar">
<zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/>
</jar>
For example:
<property name="library.dir" value="dist"/>
<property name="library.file" value="YourJavaArchive.jar"/>
<property name="library.path" value="${library.dir}/${library.file}" />
<property name="library.path.new" value="${library.dir}/new-${library.file}"/>
<target name="purge-superfluous">
<echo>Removing superfluous files from Java archive.</echo>
<jar destfile="${library.path.new}">
<zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/>
</jar>
<delete file="${library.path}" />
<move file="${library.path.new}" tofile="${library.path}" />
</target>