2016-05-12 157 views
1

如何向Maven提供屬性並強制它實際替換它們在pom.xml文件中?例如。我有一個「模板」pom.xml,我用它來部署軟件包和一些依賴項。我想要artifactId,version和其他變量被替換,並且產生的pom.xml被上傳。替換pom.xml中的參數

使用命令行參數不起作用,例如mvn clean deploy -DartifactId=someArtifact會將jar上傳到正確的位置,但上傳的pom.xml包含佔位符變量而不是其實際值。

具體的例子:

的POM文件中包含依賴這個定義:

<dependencies> 
     <dependency> 
      <groupId>com.avast.melka</groupId> 
      <artifactId>${runtimeId}</artifactId> 
      <version>${runtimeVersion}</version> 
     </dependency> 
    </dependencies> 

而且我想Maven來部署相應的包含類似POM:

<dependencies> 
    <dependency> 
     <groupId>com.avast.melka</groupId> 
     <artifactId>actualIdValue</artifactId> 
     <version>1.0.42</version> 
    </dependency> 
</dependencies> 

如何我要這樣做嗎?我能找到的最接近的是http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html - 但是這涉及替換資源文件中的值,而不是POM,對我來說,它好像是一個不同的用例。

+0

我不認爲有一個簡單的方法來做到這一點。 'maven-release-plugin'爲版本做了類似的事情......我想你可以根據它的作用創建你自己的插件。 – Tunaki

+0

爲什麼您需要pom文件的模板才能部署工件?爲什麼不創建它們並使用它呢?爲什麼不通過'mvn deploy'使用maven構建? – khmarbaise

+0

我想在通用的CI構建作業中自動使用它,可以由我公司的不同團隊實例化並自定義生成不同GAVC和依賴關係的Maven JAR。而不是每個團隊都必須手動創建他們自己的POM.xml,我想讓他們在實例化時只定制構建作業參數。除此之外,即使所有的變量都是「設置爲石頭」,我仍然需要提供build版本(第三個數字對應於內部版本號)。 –

回答

0

您可能會使用replacer-plugin。請參閱互聯網瞭解更多該插件的用法。

警告1:我不認爲取代artifactId是一種可維護的策略。但這是你的選擇。

警告2:只在該配置文件中定義此插件才能在此特定版本上激活。否則,這個插件執行會繼承到子項目,這可能是一個壞主意。

你的配置應該是這個樣子:

<plugin> 
    <groupId>com.google.code.maven-replacer-plugin</groupId> 
    <artifactId>replacer</artifactId> 
    <executions> 
     <execution> 
      <id>yourId</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>replace</goal> 
      </goals> 
      <configuration> 
       <replacements> 
        <replacement> 
         <token><![CDATA[<version>[$][{]runtimeVersion[}]</version>]]></token> 
         <value><![CDATA[<version>1.0.42</version>]]></value> 
        </replacement> 
       </replacements> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>