使用Ant更改jar内的属性文件

use*_*811 5 ant

我在jar中的属性文件中有一个设置,我希望在构建时使用ant来改变它.理想情况下,如果我能够在属性文件中搜索特定文本并轻松替换它,我想这样做但不确定如何.

所以我想我可以用另一个已经预定义新设置的属性文件覆盖它.jar已存在于我的目录中,jar的层次结构如下:

food.jar
/com/food/donut.properties
some file...
some file...
Run Code Online (Sandbox Code Playgroud)

如果我有另一个donut.properties文件,其中不同的设置位于不同的目录中.我怎么能用蚂蚁覆盖它呢?

感谢您的帮助,非常感谢!

编辑:

使用以下代码,我可以将属性文件复制到jar中.但每当我尝试将新属性文件复制到旧属性文件的同一目录中时,它都不会被替换.(即如果我将前缀更改为'com',我可以看到新的属性文件被插入到jar中.如果前缀更改为com/food,则不会替换任何内容.我做错了什么?

    <jar destfile="${dist.dir}/food.jar" update="true">
        <zipfileset file="donut.xml" prefix="com/food/" />
    </jar>
Run Code Online (Sandbox Code Playgroud)

Reb*_*bse 5

需要Ant 1.8.x.

步骤1)
编辑属性文件,可能有多个嵌套的条目元素:

<propertyfile file="/path/to/propertyfile/foo.properties">
 <!-- will change an existing key named 'somekey' with the value 'foo' inplace -->
 <entry key="somekey" value="foo"/>
</propertyfile>
Run Code Online (Sandbox Code Playgroud)

请参阅Ant手册属性文件

步骤2)
使用更改的属性文件更新jar:

<jar destfile="/path/to/your/foo.jar" update="true">
 <fileset dir="/path/to/propertyfile" includes="*.properties"/>
</jar>
Run Code Online (Sandbox Code Playgroud)

用于重命名使用嵌套映射器,如下所示:

<jar destfile="/path/to/your/foo.jar" update="true">
 <mappedresources>
  <fileset dir="." includes="*.properties"/>
   <globmapper from="*.properties" to="/com/xml/*.properties"/>
 </mappedresources>
</jar
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 3

jar任务的ant文档说:

update 参数控制 JAR 文件已存在时发生的情况。当设置为 yes 时,JAR 文件将使用指定的文件进行更新。当设置为 no(默认值)时,JAR 文件将被覆盖。Zip 任务文档中提供了使用此功能的示例。请注意,ZIP 文件以两秒的粒度存储文件修改时间。如果文件比归档中的条目新不到两秒,Ant 将不会认为它较新。

您可能需要确保属性文件比 jar 文件中的属性文件新。使用触摸任务可以解决这个问题。

或者,您可以将 jar 解压缩到临时目录中,使用复制任务复制属性文件并将其覆盖属性设置为 true,然后重新 jar 临时目录的内容。