簡體   English   中英

Maven發布插件,具有與配置文件相關的子模塊

[英]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之前先運行cleanverify目標。 verify目標嘗試編譯每個模塊。

我現在要做的是配置插件,使其僅運行verify目標。 但是由於無論如何verify都很重要,因此在不同環境下進行發布之前,我會手動運行它。 我的釋放過程如下:

  1. 在Mac和Linux環境中運行mvn clean verify 為此,我配置了一個多節點哈德遜作業。
  2. 運行mvn release:prepare -P macosx,linux -DdryRun=true -DpreparationGoals=clean ,這將激活兩個配置文件但跳過編譯
  3. 檢查空轉結果是否令人滿意
  4. 使用-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM