[英]Maven release plugin with profile-dependent submodules
我正在嘗試使用多模塊Maven項目執行發布。 我的目標是修改所有pom的版本,並在SCM中創建標簽,這就是我使用maven版本插件的原因。
該項目的層次結構已簡化為:
example/
module1/
module2/
module-jni-linux/
module-jni-macosx/
example
的pom.xml包含如下模塊:
<modules>
<module>module1</module>
<module>module2</module>
</modules>
並且module2
的pom.xml包含取決於操作系統類型決定的配置文件的模塊:
<profiles>
<!-- profile for linux -->
<profile>
<id>linux</id>
<activation>
<os>
<name>linux</name>
</os>
</activation>
<modules>
<module>module-jni-linux</module>
</modules>
</profile>
<!-- profile for mac os -->
<profile>
<id>macosx</id>
<activation>
<os>
<name>mac os x</name>
</os>
</activation>
<modules>
<module>module-jni-macosx</module>
</modules>
</profile>
最后,每個module-jni-*
使用native-maven-plugin編譯一些C / C ++源並生成共享庫。
問題:
當我在Mac OS X盒子中嘗試mvn release:prepare -DdryRun=true
時,我意識到發布過程未考慮module-jni-linux
。 這意味着盡管所有模塊都傳遞到1.0.0 / 1.0.1-SNAPSHOT版本,但不會修改module-jni-linux
。 在執行release:prepare
時,我希望所有子模塊都被更新,即使其配置文件尚未激活。
我嘗試使用mvn -P linux,macosx ...
來激活兩個配置文件,但是module-jni-linux
無法在mac下構建(反之亦然)。
如何執行發布以更新兩個子模塊的版本?
好的,我找到了一種方法:
為了創建發行版,maven-release-plugin在提交給SCM之前先運行clean
並verify
目標。 verify
目標嘗試編譯每個模塊。
我現在要做的是配置插件,使其僅運行verify
目標。 但是由於無論如何verify
都很重要,因此在不同環境下進行發布之前,我會手動運行它。 我的釋放過程如下:
mvn clean verify
。 為此,我配置了一個多節點哈德遜作業。 mvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=clean
,這將激活兩個配置文件但跳過編譯 -DdryRun=false
執行步驟2 對於父pom.xml中的Maven版本插件配置,是否嘗試使用<arguments>
參數指定要啟用的配置文件?
您可以在此處了解更多信息: http : //maven.apache.org/plugins/maven-release-plugin/prepare-mojo.html
基本上,它允許您將其他參數傳遞給Maven調用,包括配置文件,例如-P linux,macosx。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.