2016-09-07 135 views
2

我已經加入vaadin-client-compiler依賴在我vaadin應用POM一個provided範圍依賴。傳遞依賴從提供的範圍來依賴

正如我所看到的,provided依賴不是傳遞性的,所以vaadin-client-compiler的依賴關係應該成爲我的webapp的依賴關係。

但是,我發現我的WEB-INF/lib目錄內vaadin-client-compiler(公地lang3-3.1.jar)的依賴。

此外,這些依賴關係在mvn dependency:tree輸出示出爲好。

[INFO] | +- javax.validation:validation-api:jar:1.0.0.GA:compile 
[INFO] | \- javax.validation:validation-api:jar:sources:1.0.0.GA:compile 
[INFO] +- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided 
[INFO] | +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:compile 
[INFO] | | \- com.yahoo.platform.yui:yuicompressor:jar:2.4.8:compile 
[INFO] | |  \- rhino:js:jar:1.7R2:compile 
[INFO] | +- commons-collections:commons-collections:jar:3.2.2:compile 
................................................ 
................................................. 
[INFO] | +- commons-codec:commons-codec:jar:1.8:compile 
[INFO] | +- commons-io:commons-io:jar:2.4:compile 
[INFO] | +- org.apache.commons:commons-lang3:jar:3.1:compile 

問題:沒有一個provided範圍依賴的依賴,爲什麼就成了我的web應用程序的依賴呢?

+0

瓶子被提供在最終的包裝? – VinayVeluri

+0

@VinayVeluri,是的。正如我所提到的,在'WEB-INF/lib'中可用的依賴jar包。 –

+0

你也許使它'provided'之前建立自己的Web應用程序?如果您嘗試運行'MVN清潔package'會發生什麼,它STIL在你的lib目錄中顯示? – Morfic

回答

1

事實上,根據官方Maven Dependency Mediation,該provided範圍將其傳遞依賴帶來如下:

  • 傳遞依賴於compile範圍>將被提取爲provided範圍
  • provided範圍內的傳遞依賴關係忽略
  • Transitiv在runtime範圍ë依賴性>將在test範圍中獲取作爲provided範圍
  • 傳遞依賴>忽略

因此,provided依賴性的傳遞依賴要麼被忽略或導入爲provided以及並且這樣沒有最後包裝的部分war

添加以下依賴於一個樣本項目:

<dependencies> 
    <dependency> 
     <groupId>com.vaadin</groupId> 
     <artifactId>vaadin-client-compiler</artifactId> 
     <version>7.6.4</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

會導致以下,執行:

mvn dependency:tree -Dincludes=com.vaadin 

我們將不得不作爲輸出的一部分:

[INFO] \- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-shared:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-server:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-client:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:provided 
[INFO] \- com.vaadin:vaadin-client-compiler-deps:jar:1.2.0:provided 

與文檔完全一致。

然而,如果我們添加到pom.xml文件執行以下操作:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.vaadin</groupId> 
      <artifactId>vaadin-server</artifactId> 
      <version>7.6.4</version> 
      <scope>compile</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

注:我們覆蓋其傳遞的一個依賴的範圍compile

重新執行以前的命令,我們將有:

[INFO] \- com.vaadin:vaadin-client-compiler:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-shared:jar:7.6.4:compile 
[INFO] +- com.vaadin:vaadin-server:jar:7.6.4:compile 
[INFO] +- com.vaadin:vaadin-client:jar:7.6.4:provided 
[INFO] +- com.vaadin:vaadin-sass-compiler:jar:0.9.13:compile 
[INFO] \- com.vaadin:vaadin-client-compiler-deps:jar:1.2.0:provided 

這意味着:在傳遞依賴vaadin-server仍然是vaadin-client-compiler帶來的,但現在它的範圍是在compile按依賴管理。

因此,你應該:

  • 檢查您的pom.xml是否定義任何dependencyManagement部分
  • 檢查是否你的父POM或層次結構中的任何POM會這樣做,執行mvn help:effective-pom -Doutput=full-pom.xml肯定會幫助
  • 檢查是否有任何活動的配置文件也將影響構建,執行mvn help:active-profiles也將有助於
+0

@LahiruChandima你解決這個問題?這個答案有幫助嗎? –