我有一个jar的依赖,我已经标记为pom xml中提供的 . 似乎只有一些传递依赖jar被标记为提供,而不是与war打包在一起,但其他jar仍然是使用war libs编译和打包的范围 . 我需要明确标记为所有传递依赖项提供的范围 .
pom xml中的依赖关系:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<scope>provided</scope>
</dependency>
依赖树:
[INFO] +- org.apache.camel:camel-ftp:jar:2.17.0.redhat-630262:provided
[INFO] | +- com.jcraft:jsch:jar:0.1.54:provided
[INFO] | +- commons-net:commons-net:jar:3.3.0.redhat-3:provided
[INFO] | +- com.sun.xml.bind:jaxb-core:jar:2.2.11:compile
[INFO] | \- com.sun.xml.bind:jaxb-impl:jar:2.2.11.redhat-2:compile
[INFO] +- org.apache.camel:camel-csv:jar:2.17.0.redhat-630262:provided
插件版本详细信息:
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cdi.api.version>1.2.0.redhat-2</cdi.api.version>
<javax.inject.version>1.0.0.redhat-6</javax.inject.version>
<sonar.host.url>http://vfrde2srta0401.agcs.biz:9000</sonar.host.url>
<xerces.version>2.11.0-22</xerces.version>
<xmlunit.version>1.6</xmlunit.version>
<maven.compilerplugin.version>3.7.0</maven.compilerplugin.version>
<maven.releaseplugin.version>2.5.3</maven.releaseplugin.version>
<maven.warplugin.version>3.2.0</maven.warplugin.version>
<maven.jarplugin.version>3.0.2</maven.jarplugin.version>
<maven.surefireplugin.version>2.20.1</maven.surefireplugin.version>
<maven.coberturaplugin.version>2.7</maven.coberturaplugin.version>
3 回答
正如一些人已经注意到的那样,
provided
范围内的依赖关系的传递依赖关系应该在项目中获得范围provided
. 但是,如果您在范围compile
中具有具有相同传递依赖性的其他依赖项,则可以将范围更改为编译 . 在你的情况下,这两个:可能是由于你的pom中的另一个依赖而不是
camel-ftp
. 您需要运行 mvn dependency:tree -Dverbose 以获得这两个为何将其范围更新为compile
的提示 .根据Maven documentation (see table),如果使用
provided
范围定义依赖关系,则传递依赖关系将具有以下最终范围,具体取决于其原始范围:compile > provided
提供>省略
运行时>提供
test>省略
然后,您的
provided
依赖关系的compile
传递依赖关系应被视为provided
.传递依赖关系范围基于定义的范围设置 . 请参阅Introduction to the Dependency Mechanism . 您可以通过更改范围然后验证依赖关系树(mvn dependency:tree)来验证这一点 .