18

我有一个祖先依赖项,它具有所提供的依赖范围,我需要将该范围传播到依赖于我的项目的任何内容。

例如,说我有SomeProjectA取决于SomeLibraryB. 我需要范围SomeLibraryB已提供。

目前要编译任何依赖的东西,SomeProjectA还必须设置SomeLibraryB已提供。我宁愿传播该范围,然后让任何依赖于我的项目处理我的项目的依赖项..

4

3 回答 3

20

我不认为这是可能的。每个项目都应自行声明提供的依赖项。传播该范围是错误的,因为您会对部署做出假设,因为您不负责部署。您图书馆的用户会这样做..

于 2013-09-13T22:42:56.737 回答
0

简单的破解

这可以通过一个简单的 hack 来实现。

在此处输入图像描述

您可以排除SomeLibraryBSomeLibraryC在您的直接依赖标签内。

下面是您的SomeProjectA.

   <dependency>
        <groupId>org.direct.dependency</groupId>
        <artifactId>SomeProjectA</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.some</groupId>
                <artifactId>SomeLibraryB</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.some</groupId>
                <artifactId>SomeLibraryC</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

但是如果你有这个配置,你的测试和编译其他验证将开始失败。因此,您可以使用<scope>test</scope>.

    <dependency>
        <groupId>org.some</groupId>
        <artifactId>SomeLibraryB</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.some</groupId>
        <artifactId>SomeLibraryC</artifactId>
        <scope>test</scope>
    </dependency>
于 2018-09-14T06:58:41.387 回答
-1

Maven 文档中可以看出,提供的作用域不会影响编译,但会影响运行时。通常,您只需要在打包项目的依赖项中指定提供的范围,例如war类型的项目。出于这个原因,它不具有传递性通常并不重要。

换句话说,如果您在jar没有明确指定其范围的情况下向项目添加依赖项,则该依赖项将在编译期间可用,该依赖项的依赖项也将可用。如果您随后显式声明该依赖项已提供范围,则这不会改变。

于 2013-09-13T23:20:20.397 回答