I want to put a set of files that look like this into a jar:
yay/my.jar
boo/my.jar
foo/my.jar
bar/my.jar
In the process, I want all of them renamed as follows:
yay_my.jar
boo_my.jar
foo_my.jar
bar_my.jar
I was hoping to use a mapper to accomplish this, but the fileset elements I am using and the jar task don't seem to support it anywhere.
How do I apply a mapper when building a jar, or else how can I perform a transformation like this? I want to avoid copying all the files to the directory structure I want and making duplicates all over the place, which is how our build system works now.
You can use a zipfileset
with a fullpath
attribute to rename the filename in the jar:
<jar destfile="newjar.jar">
<zipfileset dir="yay" includes="my.jar" fullpath="yay_my.jar"/>
<zipfileset dir="boo" includes="my.jar" fullpath="boo_my.jar"/>
<!-- etc. -->
</jar>
You can't use a mapper with this technique though, you'll have to list each jar file explicitly. If you can assume that every file is named my.jar
, and they are all in an immediate child directory, you can use the subant
target to glob them all up:
<target name="glom">
<subant genericantfile="${ant.file}" target="update-jar">
<dirset dir="." includes="*"/>
</subant>
</target>
<target name="update-jar">
<basename file="${basedir}" property="dirname"/>
<property name="path" value="${dirname}_my.jar"/>
<jar destfile="../newjar.jar" update="yes">
<zipfileset dir="." includes="my.jar" fullpath="${path}"/>
</jar>
</target>