在maven中,您是否可以禁止在代码中使用传递依赖,但仍将其保留在类路径中?

时间:2014-12-26 08:43:43

标签: java maven

有一个库A依赖于库B.我的项目有A作为声明的依赖项,但是它也将B拉入我项目的类路径中。是否有一个插件可以阻止库B中的类在我的项目中使用?

我知道依赖排除机制,但这不是一个选项,因为如果我排除B,那么程序将无法工作,因为A依赖它。出于同样的原因,maven-enforcer-plugin也不起作用(至少是标准规则)。

我正在寻找的是一种可以分析源代码或字节代码的插件,如果从我的项目类中导入来自A的传递依赖项的包,则会使构建失败。

1 个答案:

答案 0 :(得分:2)

(a)使A成为编译时依赖项并在该节中排除B.

(b)将B添加为运行时依赖项。

这具有您想要的效果,即B在编译时不可用,但在运行时包含。无需使用额外的工具来检查基于包的策略。

以下是一个示例(替换groupId和版本以适合您的情况):

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>A</artifactId>
        <version>${project.version}</version>
        <exclusions>
            <exclusion>
                <groupId>${project.groupId}</groupId>
                <artifactId>B</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>B</artifactId>
        <version>${project.version}</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>