2016-03-07 27 views
0

我正在開發一個多模塊構建,當我爲構建運行集成測試時,需要構建中的另一個模塊產生的構件之一作爲依賴項。我使用'provided'範圍,因此它不包含在爲我們正在構建的模塊生成的工件中,但要確保它已編譯,以便我們可以爲我們的測試進行檢查。但是,我們列爲依賴項的組件有其自己的一組集成測試,它將運行。我希望能夠在解析依賴關係時(例如,包和不驗證)在Maven應該使用的配置文件的定義中指定。有沒有一種方法可以在依賴關係的定義中指定我們想用哪個Maven階段/配置文件解決依賴關係?在Maven中爲'依賴'指定配置文件

的當前設置:

<dependency> 
     <groupId>groupId</groupId> 
     <artifactId>artifactId</artifactId> 
     <version>version</version> 
     <scope>provided</scope> 
</dependency> 

所需的設置:

<dependency> 
     <groupId>groupId</groupId> 
     <artifactId>artifactId</artifactId> 
     <version>version</version> 
     <scope>provided</scope> 
     <!-- only go up until package phase for dependency artifact --> 
     <phase>package</phase> 
     <!-- use dependency's skip-tests profile to compile it --> 
     <profile>skip-tests</profile> 
</dependency> 
+0

您能否提供或重新提出您的問題?也許增加一個多模塊結構和依賴的ascii圖?否則您的要求可能會導致誤解(也就是說,我沒有得到它)​​ –

回答

2

假設B是依賴,的要構建具有完全的測試項目,和C父A和B

A依賴於B,本公司POM裏面:

<dependency> 
     <groupId>BgroupId</groupId> 
     <artifactId>BartifactId</artifactId> 
     <version>Bversion</version> 
     <scope>provided</scope> 
</dependency> 

B有一個無測試配置文件,默認情況下不活動。它在其末尾定義:

<profiles> 
    <profile> 
     <id>no-test</id> 
     <active>false</active> 
     <build> 
     <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
      <skipTests>true</skipTests> 
     </configuration> 
     </plugin> 
     </plugins> 
    </build>   
    </profile> 
</profiles> 

然後,您可以使用no-test配置文件構建C.您必須位於C項目的根目錄執行以下命令:

mvn clean install -Pno-test 

其結果是,C將首先建立B(因爲A需要B)與無測試配置文件。所以B將使用「skip-tests」屬性來構建。

然後C將構建A.由於在A項目的pom中沒有爲「無測試」配置文件定義特定行爲,因此A將構建完整測試。

+0

感謝您的快速回復。你指定的配置文件是在我提供的測試模塊(我們稱之爲模塊模塊A)的模塊中,還是作爲依賴項(模塊B)列出的模塊?我希望爲模塊A構建具有'all-tests'概要文件(運行所有測試,包括單元,組件,集成測試)的模塊,並將模塊B的工件用作依賴項。如果我將這種依賴關係置於'全部測試'配置文件模塊A中,它如何知道模塊B要使用的配置文件?我要測試這個建議的解決方案,但是想知道你的解決方案是如何工作的。 – betawave92

+0

也許我誤解了你的問題(我再讀一遍)。因此,如果我改述,你想使用在B軟件包階段之後生成的jar作爲A的依賴關係嗎?對不起,如果我讓你重複... –

+0

無後顧之憂;這是一個複雜的問題。我想在模塊A中使用模塊B的工件作爲依賴項並提供範圍。當前我運行模塊A的構建,並將模塊B列爲依賴項,它將運行模塊B的整個構建,包括模塊B的集成測試,組件測試和單元測試。當我將模塊B指定爲依賴項時,我想跳過模塊B的所有測試,然後對其進行編譯。我想查看依賴關係定義中是否有方法指定模塊B要使用的配置文件。 – betawave92