2011-11-04 59 views
5

我想建立我的ear文件一次,然后使用ant来更改application.xml中的一些设置,属性文件等。蚂蚁可以替换jar/ear/war文件中的文本吗?

有没有办法用ant来做到这一点?

[编辑]刚刚发现这个

How do I modify a file in a jar file using ANT?

+1

AFAIK,no。将任务替换为目录。你可以解压缩,替换和重新压缩? – aishwarya

+0

更新选项是否适用于你想要的? http://stackoverflow.com/questions/12059046/ant-ear-update-without-full-exploding-ear – peater

回答

4

,你可以修改你的罐子或耳内文件的唯一方法是使用<unzip>任务,使用<replace>任务修改字段在文件中,然后使用<zip><jar>/<ear>任务重新将该文件重新备份。

有几种方法可以处理这个问题,而不必解压缩和重新压缩你的耳朵/ JAR/WAR文件:

  • 的首选方法是安装应用程序服务器,因此它可以在外面找你的属性的耳朵本身。也可以配置application.xml文件,以便在指定位置时不使用相对目录,而不是从机器的根目录指定位置。通过从您的耳朵中删除嵌入式环境信息,您可以在所有环境中使用相同的earfile。

  • 不幸的是,我们无法做到以上所述,并且必须为每个环境提供单独的ear文件。我们使用Jenkins作为我们的连续构建服务器。当詹金斯做我们的建造时,我们同时为每个环境建造多个耳朵。这样,当我们从开发到质量保证,再到阶段时,我们至少可以引用相同的版本号。我们编译一次,然后使用AntContrib <foreach> task来获得正确的属性文件设置和正确的application.xml文件的earfile。我们在<copy>任务中使用<filterset>修改属性,并在建立耳朵时修改属性application.xml

+0

谢谢,我们也使用詹金斯,并已考虑建设3或4耳文件,但希望有其他解决方案。顺便说一句,build pipline插件相当不错。 – blank

0

你可以做这样的事情

<zip destfile="tmp.jar" > 
    <zipfileset src="lib/myjar.jar" excludes="org/example/My*.class" /> 
    <zipfileset dir="bin" includes="org/example/My*.class" /> 
</zip> 
<move file="tmp.jar" tofile="lib/myjar.jar"/> 

在这个例子中,我们使用myjar.jar作为源,但不包括所有classees在组织/ example目录开始我创建一个tmp.jar。然后,我们从bin目录中添加我们的新版本。然后我们用我们的新版本替换jar文件。