2011-01-13 61 views
27

我需要修改大型項目的maven構建以跳過典型開發構建過程中的某些步驟(即不構建* -source.jar文件)。我爲maven搜索了「條件執行」,但沒有找到任何東西。使用maven配置文件來控制構建執行

一個開發人員配置文件聽起來像這樣做的直觀方式 - 但我不知道多麼直觀的maven是。配置文件顯示如何爲不同配置文件設置不同的屬性(即數據庫連接參數)。我想我可以設置一個屬性,然後測試該屬性是否在maven-source-plugin-executions-execution標籤中設置。

這是在maven中執行條件執行的正確方法嗎?

什麼是「正確」的方式來做到這一點在maven中?

回答

33

您正在考慮它有點倒退:有配置文件啓用的行爲,而不是禁用它。這就是配置文件最擅長的,並且正是您的情況:您只希望在某些情況下運行這些步驟。所以,你可能有類似:

<profile> 
    <id>source-jars</id> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 

而且事實上也只是這樣的maven-source-plugin usage page一個例子。當你需要生成你的工件時,使用mvn -P source-jar(或其他)。而已!如果您只需要在發佈時執行此操作,則release plugin甚至可以提供一種方法來在發佈插件配置中定義要正確使用的配置文件。

+0

我們的poms是在默認運行maven-source-plugin的地方編寫的,所以我必須按照您的建議重新構建它們。 – 2011-01-14 16:33:30

+3

在很多情況下,插件可以默認啓用並且使用配置文件禁用。我認爲這個答案避免瞭解決這個問題。 – Kevin 2014-02-10 02:25:56

6

您可以通過將兩個配置文件添加到您的POM來實現默認啓用source-jar插件的實際目標。該Maven profiles documentation指出,可以在一個元素<activeByDefault>true</activeByDefault>添加到activation部分,並指出

,除非在同一POM另一種規範使用先前描述的方法之一激活此配置文件將自動生效所有構建

所以,你可以添加兩個配置文件,其中之一是activeByDefault,其中包括相關的插件,另外,它可以在任何的標準方式(如-P從命令行)被激活,以阻止默認配置文件從運行。因此,在您的pom.xml(或Maven設置或其他)的profiles部分可能是這樣的:

<profile> 
    <id>source-jars</id> 
    <activation> 
    <activeByDefault>true</activeByDefault> 
    </activation> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-source-plugin</artifactId> 
     ... 
     </plugin> 
    </plugins> 
    </build> 
</profile> 
<profile> 
    <!-- active this profile to disable the source-jars plugin --> 
    <id>no-optional-plugins</id> 
</profile> 

不幸的是,我看不到一個方法,使這種方法來控制多個插件很好地擴展 - 我認爲你需要O(n^2)配置文件n插件,但對於這種簡單的情況下,它應該很好。

與Maven≥2.0.10另一種可以簡單的選擇是隻從上面(仍activeByDefault)的source-jars輪廓,並manually deactivate the profile當你想通過之後-P CLI標誌與前綴或-!配置文件ID:

$ mvn -P !source-jars 

該方法並不具有多個插件相同的O(n^2)問題,但它也不太靈活,因爲停用不能由系統屬性,環境變量,JDK版本等觸發。