2011-11-04 60 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文件。