2013-07-09 24 views
0

我在尋找解決方案以構建不同版本的EAR(使用maven-ear-plugin)時遇到了一些問題。有條件地使用maven構建EAR文件

我想要的是能夠爲生產生成EAR或爲測試生成EAR,其中測試EAR具有不同的ejb-jar.xml部署描述符以及來自src/test文件夾的一些其他類。

到目前爲止,我發現的唯一方法是引入配置文件「blubb」,其中我重寫了jar-plugin配置,以包含來自src/test/resources以及一些java文件的ejb-jar.xml ,並將自定義後綴添加到我的工件ID(或設置分類器)。然後在我的部署pom中引入相同的配置文件,在那裏我依賴擁有後綴的工件來構建修改後的EAR。

我已經閱讀過各種來源,它是EVIL(即不是Maven方式)根據配置文件生成同一項目的不同罐子。 (例如,在 Maven best practice for generating multiple jars with different/filtered classes?http://blog.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/

所以我的問題是,我怎麼能做到這一點呢?如果我使用特定於測試的代碼構建一個額外的模塊,以在配置文件中有條件地包含在我的部署中,那麼我的問題是我的ejb-jar.xml需要駐留在該jar文件的META-INF目錄中,因爲我的附加「test」模塊將包含在另一個jar中,因此ejb-jar.xml將不會應用於我原始jar中的ejbs。

任何建議,我怎麼能解決這個問題(產生一個特殊的測試耳與修改後的部署描述符和額外的類)maven的方式?

TIPPS和見解的高度讚賞:-)

回答

0

我找到了一些方法來實現兩個EAR模塊,我想要的東西,使用maven-dependency-plugin。

基本的問題是,沒有代碼應該被重複,但是,同樣的模塊應該建立與額外/替換內容的需求。

我這樣做的方式是創建第二個模塊,並在聲明我想修改爲唯一依賴項的模塊中。然後在構建週期中,我添加了maven-dependency-plugin,其目標是「unpack-dependencies」,並選擇在「prepare-package」時間將原始依賴項解壓縮到target/classes文件夾中。

這樣我得到了第二個模塊,它有第一個模塊的內容,再加上一些修改,然後我可以對我的調整模塊的主要來源做出修改。

總之這仍然是一切,但很漂亮,在我看來,Maven的有它的時間,但現在是時候更好的構建工具;-)

順便說一句,如果有人知道一個更優雅的解決方案,我米仍然打開...我的問題往往是,在任何情況下,我想重複我的配置,甚至我的代碼。而且,Maven似乎讓這真的很難......

0

最好的解決方法是不創建分離的EAR的用於從相同的測試/ PROD等。但如果你真的喜歡做的事,你應該創建兩個單獨的耳模塊:

+-- root (pom.xml) 
     +--- mod-ejb (pom.xml) 
     +--- mod-xxx (pom.xml) 
     +--- mod-ear (pom.xml) 
     +--- mot-it-ear (pom.xml) 

這意味着具有可以有不同的描述符等

+0

但假設我有200個模塊,每個模塊都安裝在我的本地回購站中,然後執行我的部署pom,在那裏我收集所有200個依賴關係並將它們包裝到我的耳朵中。我不確定,在這個步驟中,如何調整單個項目的內容,例如,200個項目中有50個需要在其META-INF中包含ejb-jar.xml。我必須首先以不同的方式構建它們,並帶有不同的工件ID,對嗎?因此,所有200個項目將不得不有所不同,我不知道如何實現這一點,不能真正複製每個模塊... – pete83

+0

兩耳的原因是,某些組件需要嘲笑針對耳朵的某種類型的測試... – pete83