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

发布于 2024-12-09 16:11:28 字数 694 浏览 0 评论 0原文

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

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

food.jar
/com/food/donut.properties
some file...
some file...

如果我有另一个具有不同设置的 donut.properties 文件,位于不同的目录中。我怎样才能用ant覆盖它?

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

编辑:

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

 
        >
    

I have a settings in a properties file located within a jar that I wish to alter at build-time using ant. Ideally if I am able to search for a specific text in the properties file and replace it easily, I would like to do that but isn't sure how.

So I was thinking I can overwrite it with another properties file that has the new settings already predefined. The jar already exists in my directory and the hierarchy of my jar is as follows:

food.jar
/com/food/donut.properties
some file...
some file...

If I had another donut.properties file with a different setting located in a different directory. How can I overwrite it with ant?

Thanks for the help, much appreciated!

EDIT:

With the following code I was able to copy the properties file into the jar. But whenever I attempt to copy the new properties file into the same directory of the old properties file, it does not get replaced. (i.e. If i change the prefix to 'com' i can see the new properties file being inserted into the jar. If the prefix is changed to com/food, nothing is replaced. What am i doing incorrectly?

    <jar destfile="${dist.dir}/food.jar" update="true">
        <zipfileset file="donut.xml" prefix="com/food/" />
    </jar>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

诗笺 2024-12-16 16:11:28

需要 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 手册属性文件

步骤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

needs Ant 1.8.x

Step 1)
edit your propertyfile, multiple nested entry elements possible :

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

see Ant Manual propertyfile

Step 2)
update your jar with the altered propertyfile :

<jar destfile="/path/to/your/foo.jar" update="true">
 <fileset dir="/path/to/propertyfile" includes="*.properties"/>
</jar>

for renaming use nested mapper like that :

<jar destfile="/path/to/your/foo.jar" update="true">
 <mappedresources>
  <fileset dir="." includes="*.properties"/>
   <globmapper from="*.properties" to="/com/xml/*.properties"/>
 </mappedresources>
</jar
九八野马 2024-12-16 16:11:28

jar 任务的 ant 文档 说:

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

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

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

The ant documentation of the jar task says:

The update parameter controls what happens if the JAR file already
exists. When set to yes, the JAR file is updated with the files
specified. When set to no (the default) the JAR file is overwritten.
An example use of this is provided in the Zip task documentation.
Please note that ZIP files store file modification times with a
granularity of two seconds. If a file is less than two seconds newer
than the entry in the archive, Ant will not consider it newer.

You might need to make sure the properties file is newer than the one in the jar file. Using the touch task could solve the problem.

Or you might just unzip the jar in the temp directory, copy the properties file with the copy task and its overwrite attribute set to true, and re-jar the contents of the temp directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文