2016-09-07 2 views
2

Я добавил vaadin-client-compiler зависимость как provided зависимость от области видимости в моем приложении приложения vaadin pom.Транзитивные зависимости, исходящие из предоставленной зависимости от области видимости

Как я уже говорил, зависимость provided не является транзитивной, поэтому зависимости от vaadin-client-compiler должны стать зависимостями моего webapp.

Но я нашел зависимости от vaadin-client-compiler (commons-lang3-3.1.jar) внутри моего каталога WEB-INF/lib.

Кроме того, эти зависимости показаны также в 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 области видимости зависимости стали зависимости от моего веб-приложение?

+0

Доступна ли банку в финальной упаковке? – VinayVeluri

+0

@VinayVeluri, да. Как я уже упоминал, баны зависимости доступны в 'WEB-INF/lib'. –

+0

Возможно, вы создали свое веб-приложение, прежде чем сделать его «предоставленным»? Что произойдет, если вы попытаетесь запустить 'mvn clean package', будет ли он отображаться в вашем каталоге lib? – Morfic

ответ

0

«Непереходность» предоставленных зависимостей является сложной задачей. Это означает, что предоставленные зависимости ваших зависимостей не вытягиваются. С другой стороны, скомпилированные зависимости предоставленных зависимостей вытягиваются (как вы уже видели). Полная истина в таблице показана:

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

1

Действительно, согласно официальной Maven Dependency Mediation, то provided сфера принесет в ее переходных зависимости следующим образом:

  • транзитивных зависимости в compile рамке> будет получена как provided scope
  • Транзитные зависимости в provided сфера> игнорируется
  • Transitiv е зависимость в runtime рамке> бы быть выбрана в качестве provided объема
  • транзитивных зависимостей в test рамке> игнорируется

Следовательно, переходные Зависимости в 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 раздел
  • Проверьте ваш родитель П или любой П в иерархии будет делать это, выполняя mvn help:effective-pom -Doutput=full-pom.xml, безусловно, поможет
  • Check будет ли какой-либо активный профиль также влиять на сборку, выполнение mvn help:active-profiles также поможет
+0

@ LahiruChandima Вы исправили эту проблему? Помог ли этот ответ? –

Смежные вопросы