2012-09-17 44 views
3

我需要使用Maven創建兩個帶有兩個不同web.xml文件的WAR文件。否則,WAR文件是相同的。Maven:用不同的web.xml創建兩個war文件?

WAR文件按預期創建,但第二個文件與第一個文件具有相同的web.xml文件。

如何強制Maven WAR插件爲第二個WAR使用第二個文件?我無法使用配置文件,因爲我需要一次創建兩個文件。

我當前的代碼:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.2</version> 
    <configuration> 
    <warSourceDirectory>${basedir}/WEB</warSourceDirectory> 
    <warName>main</warName> 
    <webXml>${basedir}/CONF/web.xml</webXml> 
    </configuration> 
    <executions> 
    <execution> 
     <id>hist-war</id> 
     <phase>package</phase> 
     <goals> 
     <goal>war</goal> 
     </goals> 
     <configuration> 
     <warName>hist</warName> 
     <warSourceDirectory>${basedir}/WEB</warSourceDirectory> 
     <webXml>${basedir}/CONF/hist.web.xml</webXml> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

我剛剛發現了另一個選項,它似乎在我的情況下工作(從這個[鏈接](http://maven.apache.org/plugins/maven-war-plugin/faq.html#filtering)): 'filteringDeploymentDescriptors'配置屬性。 – KirEvse

回答

4

使用Maven WAR pluginoverlay功能。

您需要兩個WAR項目。第一個是你原來的,其web.xml文件在正確的位置。這在配置方面沒有任何特定需求。只要確保它按照您的預期構建即可。

第二個只包含其POM和WEB-INF目錄中的替代web.xml。該項目的POM必須包含對第一個項目的依賴關係,該項目的類型被指定爲war,範圍指定爲runtime。你不需要顯式地配置Maven WAR插件。

+0

它可能無法工作,因爲web.xml無法覆蓋(基於此[鏈接](http://java.dzone.com/articles/mavens-war-overlay-what-are ))和這句話:「可能由此產生的另一個問題是處理web.xml。overlay的web.xml文件不會被複制,也不會以任何方式合併,所以如果您的覆蓋層具有特定的web .xml文件信息,您可以手動將其添加到web.xml或使用標記,並將內容添加到名爲web-overlay的文件中.xml添加到疊加戰爭項目中。「 – KirEvse

+0

我提議的是將完整的原始WAR疊加到只有替代'web.xml'文件的新WAR上。這應該正是你評論中提到的原因。 –

+0

如何配置疊加層,以便將正確名稱的正確位置包含我的hist.web.xml文件?我假設我將不得不使用''幷包含所有內容。但我不確定web.xml部分。當我找到一種我在其他崗位上描述過的方式時,我正在努力做到這一點。不過,我仍然有興趣找到它如何與覆蓋層一起工作。謝謝! – KirEvse

0

似乎有多種使用戰爭插件陷阱的。在這種情況下,我只會使用2個獨立的子模塊來構建相應的戰爭。

+0

這不起作用,因爲在執行之外的配置節中必須有webXml的默認值(否則執行失敗)。如果包含該部分,將會出現3場戰爭,所有這些都與3個不同的名稱相同(其中一個將只有一個默認的artifactId名稱)。這是因爲總有一個正在執行的默認戰爭目標。 – KirEvse

+0

@KirEvse - 更新了我的回答 – jtahlborn

相關問題