【问题标题】:Changing properties file inside a jar with Ant使用 Ant 更改 jar 中的属性文件
【发布时间】:2011-10-12 20:44:06
【问题描述】:

我在一个 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>

【问题讨论】:

标签: ant


【解决方案1】:

需要 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>

Ant Manual 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

【讨论】:

  • 不幸的是,我使用的是 ant 1.7x,否则这将是一个很好的解决方案。
【解决方案2】:

ant documentation of the jar task 说:

更新参数控制如果 JAR 文件已经 存在。设置为 yes 时,JAR 文件将使用文件更新 指定的。当设置为 no(默认值)时,JAR 文件将被覆盖。 Zip 任务文档中提供了一个使用示例。 请注意,ZIP 文件存储文件修改时间 两秒的粒度。如果文件更新时间少于两秒 比存档中的条目,Ant 不会认为它更新。

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

或者你可能只是在 temp 目录中解压缩 jar,复制属性文件并将复制任务及其覆盖属性设置为 true,然后重新 jar 临时目录的内容。

【讨论】:

  • 我可以执行手动解压缩和移动,但我想要一种自动化的方法。我也尝试过触摸,但我仍然遇到同样的问题。
  • 我的意思是,您可以使用 ant 及其解压缩任务来解压缩它,使用 ant 复制任务覆盖属性文件,然后使用 ant zip 任务再次压缩。一切都用 ant 自动化。
猜你喜欢
  • 2016-09-08
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多