ant - 当 ant 的 jar 任务包含在 jar 中时,如何重命名文件?

标签 ant jar mapper

我想将一组看起来像这样的文件放入 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 时如何应用映射器,否则如何执行这样的转换?我想避免将所有文件复制到我想要的目录结构并在各处进行复制,这就是我们的构建系统现在的工作方式。

最佳答案

您可以使用 zipfilesetfullpath用于重命名 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/

相关文章:

Linux 删除超过 1 年的文件夹和超过 3 个文件

java - ANT 构建中未生成类文件

android - Ant 中属性文件中的变量

java - 使用Powershell用tomcat servlet-api.jar编译java

java - 导出 Java 应用程序

php - 模型映射器,抽象公共(public)代码的最佳方式是什么,即帮助器、装饰器

Eclipse ==> Ant 插件?

java - 从 Java 代码执行 Jar

java - 设置带有输入拆分的映射器的Hadoop数量不起作用

Hadoop:哪个映射器返回了哪个结果?