我对其中一个jar有依赖关系,并且我已经将它标记为pom xml中提供的。似乎只有一些传递依赖jar被标记为已提供,并且没有与war一起打包,但其他的作用域仍然是编译的,并使用war libs.Do打包。我需要显式地将作用域标记为为所有传递依赖提供的范围。
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>发布于 2017-12-06 04:32:36
正如一些人已经注意到的,您的provided作用域依赖项的传递依赖项应该在您的项目中获得作用域provided。但是,如果作用域compile中有其他依赖项具有相同的传递依赖项,则可以将作用域更改为编译。在您的例子中,这两个:
[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可能是由pom中的另一个依赖项而不是camel-ftp传递的。您需要运行mvn dependency:tree -Dverbose来了解这两个将其作用域更新为compile的原因。
发布于 2017-12-05 19:48:58
根据Maven documentation (see table)的说法,如果使用provided作用域定义依赖项,则传递依赖项将具有以下最终作用域,具体取决于它们的原始作用域:
然后,应该将provided依赖项的compile传递依赖项视为provided。
发布于 2017-12-05 20:00:32
基于定义的作用域设置的传递依赖作用域。请参阅Introduction to the Dependency Mechanism。您可以通过更改作用域,然后验证依赖树(mvn dependency: tree )来验证这一点。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<scope>provided</scope>
<version>2.12.2</version>
</dependency>
INFO] \- org.apache.camel:camel-ftp:jar:2.12.2:provided
[INFO] +- org.apache.camel:camel-core:jar:2.12.2:provided
[INFO] +- com.jcraft:jsch:jar:0.1.49:provided
[INFO] \- commons-net:commons-net:jar:3.3:provided<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<!-- <scope>provided</scope> -->
<version>2.12.2</version>
</dependency>
[INFO] \- org.apache.camel:camel-ftp:jar:2.12.2:compile
[INFO] +- org.apache.camel:camel-core:jar:2.12.2:compile
[INFO] +- com.jcraft:jsch:jar:0.1.49:compile
[INFO] \- commons-net:commons-net:jar:3.3:compile <dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<scope>runtime</scope>
<version>2.12.2</version>
</dependency>
\- org.apache.camel:camel-ftp:jar:2.12.2:runtime
[INFO] +- org.apache.camel:camel-core:jar:2.12.2:runtime
[INFO] +- com.jcraft:jsch:jar:0.1.49:runtime
[INFO] \- commons-net:commons-net:jar:3.3:runtime <dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<scope>test</scope>
<version>2.12.2</version>
</dependency>
[INFO] \- org.apache.camel:camel-ftp:jar:2.12.2:test
[INFO] +- org.apache.camel:camel-core:jar:2.12.2:test
[INFO] +- com.jcraft:jsch:jar:0.1.49:test
[INFO] \- commons-net:commons-net:jar:3.3:testhttps://stackoverflow.com/questions/47651862
复制相似问题