有一个库A依赖于库B.我的项目有A作为声明的依赖项,但是它也将B拉入我项目的类路径中。是否有一个插件可以阻止库B中的类在我的项目中使用?
我知道依赖排除机制,但这不是一个选项,因为如果我排除B,那么程序将无法工作,因为A依赖它。出于同样的原因,maven-enforcer-plugin也不起作用(至少是标准规则)。
我正在寻找的是一种可以分析源代码或字节代码的插件,如果从我的项目类中导入来自A的传递依赖项的包,则会使构建失败。
答案 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>