2012-05-01 22 views
6

我使用maven的具組件插件來構建一個可執行的,整體的罐子依賴Maven的配置文件名稱。我還使用資源過濾來設置一些自定義的,特定車道(開發,舞臺,產品等)屬性。包括內置(與依賴)組裝插件jar

如何使罐子的finalName包括車道名稱(DEV,舞臺,督促等)?

我想下面的命令MVN導致罐子,看起來像這樣:

  • MVN全新安裝-P DEV - > WS-客戶DEV.jar
  • MVN全新安裝-P STAGE - > WS-客戶STAGE.jar
  • MVN全新安裝-P PROD - > WS-客戶PROD.jar

是否有一個Maven屬性的地方我都找不到?如果可能的話,我想避免使用冗餘命令行參數(即 - 'mvn clean install -P DEV -Dlane = DEV')。

這裏是我的組裝插件配置:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.2</version> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>ws-client</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>Example</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

回答

9

與Bhas​​kar's相似,但略有修改。

的<構建>標籤後,加入

<finalName>${project.artifactId}-${lane}</finalName> 

您可以設置車道值作爲配置文件中的屬性。

<profiles> 
    <profile> 
     <id>DEV</id> 
     <properties> 
      <lane>DEV</lane> 
     </properties> 
    </profile> 
</profiles> 

然後像你說執行構建: MVN ... -P DEV(例如MVN全新安裝-P DEV)

+0

神奇,工作精美! – chadmaughan

+0

只有在當前運行中存儲在目標文件夾中的工件上,finalName纔會對部署的工件起作用。 – khmarbaise

+0

@khmarbaise - 正確。對於這個特定的用法,jar被分發到一個倉庫之外(我知道,並不理想)。我想要一個視覺指示,以便「無maven」消費者通過簡單地瀏覽他們的類路徑上的jar文件來知道他們正在使用的通道和屬性。 – chadmaughan

2

的<構建>標籤後,加入

<finalName>${project.artifactId}-${lane}</finalName> 

,並設置「道」環境變量的配置文件名稱例如

MVN -P DEV -Dlane = DEV等

或者你可以多一點創意,這裏描述Maven - Can I reference profile id in profile definition?

EDIT ------

探索活動的配置文件ID

如果你想避免多餘的參數。

爲什麼不通過env觸發相應的配置文件。屬性。

等命令行

mvn -Dlane=DEV|STAGE|PROD 

和在POM

<profile> 
    <id>DEV</id> 
    <activation> 
    <property> 
     <name>lane</name> 
     <value>DEV</value> 
    </property> 
    </activation> 
    <build> 
    // rest of the profile 
</profile> 

而同樣爲STAGE和PROD型材

+0

感謝您的回答。如果可能的話,我想避免使用冗餘命令行參數(我更新了我的問題以反映這一點)。您提供的鏈接很有趣。有關如何通過mvn屬性引用命令行指定(活動)配置文件的任何想法? – chadmaughan

+0

編輯與更多信息關於避免冗餘 – 2012-05-01 17:15:04