我有一个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>
答案 0 :(得分:2)
正如一些人已经指出的那样,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
的提示。
答案 1 :(得分:1)
根据Maven documentation (see table),如果您使用provided
范围定义依赖关系,则传递依赖关系将具有以下最终范围,具体取决于其原始范围:
compile
依赖关系provided
依赖关系应该被视为provided
。
答案 2 :(得分:0)
基于已定义范围设置的传递依赖关系范围。请参阅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:test
答案 3 :(得分:0)
我遇到了同样的问题,我通过为需要排除的 jar 设置额外提供的范围来解决问题