我在jar中的属性文件中有一个设置,我希望在构建时使用ant来改变它。理想情况下,如果我能够在属性文件中搜索特定文本并轻松替换它,我想这样做但不确定如何。
所以我想我可以用另一个已预定义新设置的属性文件覆盖它。 jar已经存在于我的目录中,我的jar的层次结构如下:
food.jar
/com/food/donut.properties
some file...
some file...
如果我有另一个donut.properties文件,其中不同的设置位于不同的目录中。我怎么能用蚂蚁覆盖它呢?
感谢您的帮助,非常感谢!
编辑:
使用以下代码,我可以将属性文件复制到jar中。但每当我尝试将新属性文件复制到旧属性文件的同一目录中时,它都不会被替换。 (即如果我将前缀更改为'com',我可以看到新的属性文件被插入到jar中。如果前缀更改为com / food,则不会替换任何内容。我在做什么不正确?
<jar destfile="${dist.dir}/food.jar" update="true"> <zipfileset file="donut.xml" prefix="com/food/" /> </jar>
答案 0 :(得分: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>
步骤2)
使用更改的属性文件更新您的jar:
<jar destfile="/path/to/your/foo.jar" update="true">
<fileset dir="/path/to/propertyfile" includes="*.properties"/>
</jar>
用于重命名使用嵌套映射器,如:
<jar destfile="/path/to/your/foo.jar" update="true">
<mappedresources>
<fileset dir="." includes="*.properties"/>
<globmapper from="*.properties" to="/com/xml/*.properties"/>
</mappedresources>
</jar
答案 1 :(得分:3)
ant documentation of the jar task说:
update参数控制如果已经存在JAR文件会发生什么 存在。设置为yes时,将使用这些文件更新JAR文件 指定。设置为no(默认值)时,将覆盖JAR文件。 Zip任务文档中提供了此示例的使用示例。 请注意,ZIP文件使用a存储文件修改时间 粒度为两秒。如果文件不到两秒就更新了 与归档中的条目相比,Ant不会认为它更新。
您可能需要确保属性文件比jar文件中的文件更新。使用触摸任务可以解决问题。
或者您可以将jar解压缩到临时目录中,使用复制任务复制属性文件并将其overwrite属性设置为true,然后重新设置临时目录的内容。