首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供的Maven作用域和传递依赖项

提供的Maven作用域和传递依赖项
EN

Stack Overflow用户
提问于 2017-12-05 18:54:32
回答 4查看 7.1K关注 0票数 11

我对其中一个jar有依赖关系,并且我已经将它标记为pom xml中提供的。似乎只有一些传递依赖jar被标记为已提供,并且没有与war一起打包,但其他的作用域仍然是编译的,并使用war libs.Do打包。我需要显式地将作用域标记为为所有传递依赖提供的范围。

pom xml中的依赖关系:

代码语言:javascript
复制
<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-ftp</artifactId>
            <scope>provided</scope>
</dependency>

依赖关系树:

代码语言:javascript
复制
[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

插件版本详细信息:

代码语言:javascript
复制
<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>
EN

回答 4

Stack Overflow用户

发布于 2017-12-06 04:32:36

正如一些人已经注意到的,您的provided作用域依赖项的传递依赖项应该在您的项目中获得作用域provided。但是,如果作用域compile中有其他依赖项具有相同的传递依赖项,则可以将作用域更改为编译。在您的例子中,这两个:

代码语言:javascript
复制
[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的原因。

票数 7
EN

Stack Overflow用户

发布于 2017-12-05 19:48:58

根据Maven documentation (see table)的说法,如果使用provided作用域定义依赖项,则传递依赖项将具有以下最终作用域,具体取决于它们的原始作用域:

  • compile > provided
  • provided > omitted
  • runtime > provided
  • test >省略

然后,应该将provided依赖项的compile传递依赖项视为provided

票数 4
EN

Stack Overflow用户

发布于 2017-12-05 20:00:32

基于定义的作用域设置的传递依赖作用域。请参阅Introduction to the Dependency Mechanism。您可以通过更改作用域,然后验证依赖树(mvn dependency: tree )来验证这一点。

代码语言:javascript
复制
 <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

代码语言:javascript
复制
<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

代码语言:javascript
复制
 <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

代码语言:javascript
复制
 <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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47651862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档