Maven transitive具有编译范围,尽管它在依赖管理中提供了范围

时间:2017-02-17 19:54:35

标签: java maven-3 dependency-management

这就是我的应用程序POM的外观,它使用了一个名为myframework的Spring构建的自定义框架。由于它在websphere上运行,并且核心库在运行时作为共享库提供,我只想将Web库打包到我的WAR中。虽然我使用提供的作用域定义了我的共享库依赖项,但添加了包含在提供的作用域中定义的所有核心库的共享库BOM。作为核心库slf4j的一部分的传递依赖性之一正在进入编译范围,它被打包在战争中,我不希望发生。有许多这样的核心依赖进入编译范围。为什么会这样?

根据这篇文章Maven transitive dependency has scope compile while when dependency has provided scope 我的核心库应该在提供的范围内,因为我已经导入了一个BOM,其中所有这个核心库都在提供的范围内定义但是没有发生。我还在下面提供了maven依赖树。请指教。

注意:我参与了框架的开发,我不想直接在应用程序提供的范围内直接包含依赖管理部分中的所有核心jar,因为有很多库而且我没有&# 39;不希望每个使用这个框架的开发人员都知道所有核心jar,并将它们包含在依赖管理部分,而不是希望他们使用BOM / POM。

    <dependencyManagement>
       <dependencies>
        <dependency>
            <groupId>com.myframework</groupId>
            <artifactId>myframework-shared-libs-bom</artifactId>
            <version>${library.version}</version>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

  <dependencies>
    <dependency>
          <groupId>com.myframework</groupId>
          <artifactId>myframework-shared-libs</artifactId>
          <version>${library.version}</version>
          <type>pom</type>
          <scope>provided</scope>
        </dependency>

        <dependency>
          <groupId>com.myframework</groupId>
          <artifactId>myframework-web-libs</artifactId>
          <version>${library.version}</version>
          <type>pom</type>
        </dependency>
  </dependencies>

Maven依赖树

+- com.myframework:myframework-shared-libs:pom:4.0.0-SNAPSHOT:provided
|  \- org.slf4j:jcl-over-slf4j:jar:1.7.6:provided
\- com.myframework:myframework-web-libs:pom:4.0.0-SNAPSHOT:compile
   \- com.myframework:myframework-web:jar:4.0.0-SNAPSHOT:compile
      \- com.myframework:myframework-core:jar:4.0.0-SNAPSHOT:compile
         \- org.slf4j:slf4j-api:jar:1.7.21:compile

0 个答案:

没有答案