可以使用ant在jar/ear/war文件内替换文本吗?

5

1
据我所知,不行。替换任务适用于目录。你能解压、替换和重新压缩吗? - aishwarya
更新选项对你所需的工作是否有效?https://dev59.com/D2fWa4cB1Zd3GeqPh4dh - peater
2个回答

4
唯一可以修改您的jar或ear文件中的文件的方法是使用<unzip>任务,使用<replace>任务来修改文件中的字段,然后使用<zip><jar>/<ear>任务重新压缩该文件。
有几种方法可以处理此问题,而无需解压和重新压缩您的ear/jar/war文件:
  • 首选的方法是设置应用程序服务器,使其能够在 ear 文件之外找到您的属性。也可以配置 application.xml 文件,而不是使用相对目录来指定位置,而是从机器的根目录开始指定位置。通过从 ear 文件中删除嵌入式环境信息,您可以在所有环境中使用相同的 ear 文件。

  • 不幸的是,我们无法执行上述操作,必须为每个环境提供单独的 ear 文件。我们使用 Jenkins 作为我们的持续构建服务器。当 Jenkins 进行构建时,我们同时构建多个 ear 文件,每个环境一个。这样,当我们从 Dev 到 QA 到 STAGE 再到 Production 时,我们至少可以引用相同的构建编号。我们只编译一次,然后使用 AntContrib <foreach> task 将具有正确属性文件设置和正确的 application.xml 文件的 ear 文件打包。我们在 <copy> 任务中使用 <filterset> 修改属性和 application.xml


谢谢,我们也在使用Jenkins,并考虑构建3或4个EAR文件,但希望有另一种解决方案。顺便说一下,构建管道插件非常好用。 - blank

1
你可以这样做。
<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作为源文件创建一个tmp.jar,但是排除了org/example目录下以My开头的所有类。然后我们从bin目录中添加我们的新版本。最后,我们用我们的新版本替换了jar文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接