Действительно, согласно официальному Maven Dependency Mediation, provided
Scope введет свои транзитивные зависимости следующим образом:
- Транзитивные зависимости в области
compile
> будут выбраны как область provided
- Переходные зависимости в области
provided
> игнорируются
- Транзитивные зависимости в области
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
определенно поможет
- Проверьте, не повлияет ли какой-либо активный профиль на сборку, также поможет выполнение
mvn help:active-profiles
person
A_Di-Matteo
schedule
07.09.2016
WEB-INF/lib
. - person Lahiru Chandima   schedule 07.09.2016provided
? Что произойдет, если вы попытаетесь запуститьmvn clean package
, он все еще отображается в вашем каталоге lib? - person Morfic   schedule 07.09.2016