2015-10-20 130 views
2

我正在使用maven打包我的war文件。我有一些作爲範圍提供的依賴關係。當我做一個Maven乾淨安裝,戰爭已成功創建,但與範圍提供的罐子的傳遞性依賴包括在我的lib目錄中。有什麼辦法可以刪除它們嗎?Maven war插件問題

示例方案:下面是POM

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>${resteasy.version}</version> 
     <scope>provided</scope> 
    </dependency> 

這一項包括JAR激活1.1.jar我依賴的一個。另外resteasy-jaxrs的依賴關係樹如下所示。

[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:2.3.6.Final:provided 
[INFO] | +- org.jboss.resteasy:jaxrs-api:jar:2.3.6.Final:provided 
[INFO] | +- javax.annotation:jsr250-api:jar:1.0:compile 
[INFO] | +- javax.activation:activation:jar:1.1:compile 
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.1.2:provided 
[INFO] | | \- org.apache.httpcomponents:httpcore:jar:4.1.2:provided 
[INFO] | \- net.jcip:jcip-annotations:jar:1.0:compile 
+0

您能向我們展示您的依賴關係嗎? – Christian

+0

@Christian我在問題中加入了依賴關係 – robin

+0

你可以發佈你的完整文件嗎? – DaveRlz

回答

1

最簡單的方法是創建一個<dependencyManagement>標籤,並把裏面的子依賴和設置規定的範圍:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>javax.annotation</groupId> 
      <artifactId>jsr250-api</artifactId> 
      <version>1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.activation</groupId> 
      <artifactId>activation</artifactId> 
      <version>1.1</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

這樣,你傳遞的依賴性的範圍覆蓋:

[INFO] | +- javax.annotation:jsr250-api:jar:1.0:provided (scope managed from compile) 
[INFO] | +- javax.activation:activation:jar:1.1:provided (scope managed from compile) 

務必做Maven-> Update Project和檢查dependency:tree之前檢查Force Update複選框。

+0

非常感謝。它的工作正常。你能否告訴我爲什麼排除外卡與通配符*在我的場景中不起作用? – robin

+0

我不知道你試過了什麼。但是你可以排除它,並確保提供的範圍與依賴關係。但是這樣做會有更多的工作,因爲這種依賴關係也可能嵌套在其他依賴項中。藉助dependencyManagement,您只需設置一次範圍即可。 – Christian

+0

其實我試圖像下面 org.jboss.resteasy RestEasy的-JAXRS $ {RestEasy的。版本} 提供 * * robin

0

上面提到的解決方案是不可能的,因爲我的lib中有很多傳遞依賴關係。最後得到了工作正常的maven排除。

<dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-jaxrs</artifactId> 
      <version>${resteasy.version}</version> 
      <scope>provided</scope> 
      <exclusions> 
       <exclusion> 
        <artifactId>*</artifactId> 
        <groupId>*</groupId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
+0

這確實沒有意義,因爲[提供的範圍是非傳遞性的](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html),它提供的範圍不會引入傳遞性依賴關係。 – khmarbaise