2016-07-04 28 views
1

我想列出所有工件在com.example,除了那些在com.example.foo.bar有mvn依賴項:列表打印出組中的所有工件,除了子組中的工件嗎?

對於mvn dependency:tree,我可以這樣做:

mvn dependency:tree -Dexcludes=*bar* -Dincludes=com.example.* 

然而,當我嘗試:

mvn dependency:list -DexcludeGroupIds=com.example.foo.bar -DincludeGroupIds=com.example 

的Maven還列出了bar一切。

問題:如何使用list鏡像dependency:tree的結果?

回答

1

包括/排除treelist之間的主要區別在於前者預計模式而後者確切匹配。

例如,的tree目標includes選項可以具有一個值:

,其中每個模式片段是可選的,並支持完全和部分*通配符。

。另一方面,對list目標includeGroupIds選項是一個簡單的:

逗號分隔的組列表中包含。


考慮以下依賴性例如:

<dependencies> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
    </dependency> 
    <!-- other dependencies with different groupIds than the prefix org.apache --> 
    ... 
</dependencies> 

如果我們想只包括commons,但不包括logging對於這兩個目標,我們應該運行:

mvn dependency:tree -Dincludes=org.apache.* -Dexcludes=*logging* 

注意應用通配符對這兩種模式。我們需要兩個選項,因爲第一個選項不排除第二個選項。

對於在這種情況下,list目標只包括就足夠了,因爲我們只列出了我們真正想要的:

mvn dependency:list -DincludeGroupIds=org.apache.commons 
+0

所以,如果我不知道'com.example'的子組(只知道我不想'com.example.foo'及其子組),我不能使用'list',對嗎? – Christian

+1

@Christian確實,你需要知道他們,否則他們不能被'list'匹配。 「樹」更加靈活,依賴於模式。 –

相關問題