我想将一组看起来像这样的文件放入 jar 中:
yay/my.jar
boo/my.jar
foo/my.jar
bar/my.jar
在此过程中,我希望将它们全部重命名如下:
yay_my.jar
boo_my.jar
foo_my.jar
bar_my.jar
我希望使用映射器来完成此操作,但我正在使用的文件集元素和 jar 任务似乎在任何地方都不支持它。
在构建 jar 时如何应用映射器,否则如何执行这样的转换?我想避免将所有文件复制到我想要的目录结构并在各处进行复制,这就是我们的构建系统现在的工作方式。
最佳答案
您可以使用 zipfileset
与 fullpath
用于重命名 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>
但是,您不能通过这种技术使用映射器,您必须明确列出每个 jar 文件。如果你可以假设每个文件都被命名为
my.jar
,并且它们都在直接子目录中,您可以使用 subant
目标是将它们全部连接起来:<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>
关于ant - 当 ant 的 jar 任务包含在 jar 中时,如何重命名文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460405/