首页 文章

提供Maven范围和传递依赖性

提问于
浏览
2

我有一个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 回答

  • 0

    正如一些人已经注意到的那样, 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 的提示 .

  • 2

    根据Maven documentation (see table),如果使用 provided 范围定义依赖关系,则传递依赖关系将具有以下最终范围,具体取决于其原始范围:

    • compile > provided

    • 提供>省略

    • 运行时>提供

    • test>省略

    然后,您的 provided 依赖关系的 compile 传递依赖关系应被视为 provided .

  • 1

    传递依赖关系范围基于定义的范围设置 . 请参阅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
    

相关问题