2011-11-23 75 views
27

我有一個用maven編譯的項目。我在pom.xml中聲明瞭不同的配置文件。 對於這些配置文件中的一些,我更喜歡構建戰爭,對於其他配置文件,我更喜歡使用jar。我用手動編輯pom.xml文件和改換包裝變要麼做之前根據pom中的活動配置文件更改包裝

<packaging>war</packaging> 

<packaging>jar</packaging> 

一個

$ mvn clean package -Pchosenprofile 

我怎麼能告訴MVN對應包裝每個配置文件,所以我不需要編輯pom.xml?

回答

75

如果你想使用模式可使用類似:

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
    <modelVersion>4.0.0</modelVersion> 
    .. 
    <packaging>${packaging.type}</packaging> 

    <profiles> 
     <profile> 
      <id>webapp</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <properties> 
       <packaging.type>war</packaging.type> 
      </properties> 
     </profile> 
     <profile> 
      <id>batch</id> 
      <properties> 
       <packaging.type>jar</packaging.type> 
      </properties> 
       </profile> 
      </profiles> 
</project> 
+8

那太容易了,太好了,讓我微笑。謝謝,即使它遲了一年:)。 – matiasg

1

我不認爲你可以。

我能想到的

兩種選擇:

  • 有包裝兩個獨立的模塊,並調用取決於型材其中的一個
  • 有你的模塊中的戰爭和調整生命週期(包含/排除構建步驟)根據配置文件產生的JAR或你的戰爭

我喜歡第二個更好的辦法 - 構建服務器可能會建立兩個,和開發人員使用正確的配置文件/設置跳過不必要的類型。

+0

感謝。我更喜歡attachClasses方法,因爲它更簡單,但在更復雜的情況下,我可能不得不採取這種方式。 – matiasg

+0

attachClasses(或類似的)就是我想到的第2項子彈 - 基本上戰爭是一個有額外的東西的jar - 而且maven完全有能力同時生成這兩個東西 – ptyx

4

你看過了war插件的attachClasses配置設置嗎?這個簡單的設置可以讓你在單一的Maven執行過程中構建一個war和一個jar(默認情況下分類器爲「classes」)。

+0

這不是我的想法,但它實際上解決了我的問題,這相當簡單。 – matiasg