2015-09-30 286 views
0

我想在運行時在POM中定義artifactId。我知道從this question的答案,這是不好的做法,應該使用Maven原型,但我真的想知道它是否有可能。如何在運行時設置Maven artifactId?

目前,我有這樣一個artifactId的一個POM:

<artifactId>myproject${var}</artifactId> 

,我可以通過設置命令行中的變量成功打造項目:

mvn install -Dvar=justatest 

現在是有可能在運行時更改此輸入變量?例如,將其轉換爲大寫(例如使用gmaven插件)還是類似的?

+0

你是什麼意思的運行時?你的意思是在Maven構建過程中? – Tunaki

+0

是的,在'mvn build' – dokaspar

+0

這是什麼用例? – khmarbaise

回答

2

不能在構建時更改artifactId。它是Maven座標的一部分(groupId:artifactId:version),所以它必須是固定的。

您可以在構建過程中使用maven-antrun-plugin更改所有其他參數。

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
     <execution> 
      <id>touppercase</id> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <target> 
        <property name="varUpper" value="${var}"/> 
        <script language="javascript"> <![CDATA[ 
         property = project.getProperty("varUpper"); 
         project.setProperty("varUpper", property.toUpperCase()); 
        ]]> </script> 
       </target> 
       <exportAntProperties>true</exportAntProperties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

這個執行後,Maven將有一個名爲新的屬性是大寫${var}。您需要將正確的階段設置爲上面的代碼片段以符合您的構建過程。

+0

這不適用於更改項目的。似乎沒有足夠早的階段來應用此腳本來更改「project.artifactId」屬性。 – dokaspar

+0

@dokaspar你不能在構建時改變artifactId。它是Maven座標的一部分(groupId:artifactId:version),所以它必須被修復。此解決方案將適用於所有其他屬性。 – Tunaki

+0

這是我正在尋找的真正答案:D – dokaspar