我有一个 Maven Java 项目。我不希望在编译项目时通过一系列子依赖项偶然满足我的项目依赖项。当 maven 必须检查所有使用的依赖项并将必要的库添加到战争时,我在构建最终战争时没问题,但是在编译代码时,我想确保只使用直接依赖项。为什么?
假设我有两个依赖项:
<dependency>
<groupId>com.package</groupId>
<artifactId>module-1</artifactId>
</dependency>
<dependency>
<groupId>com.package</groupId>
<artifactId>module-2</artifactId>
</dependency>
对于我们的项目,module-1 和 module-2 的用途完全不同,但是在 module-2 的依赖关系树的某个地方,使用了 module-1。我删除了 module-1 依赖项,但 maven 继续构建我的项目而没有编译错误,因为它从 module-2 子依赖项中解析了 module-1。这种变化被忽视了。
一段时间后,我们决定删除 module-2,因为我们不需要它。很奇怪,但我们不能再编译使用从模块 1 导入且未连接到模块 2 逻辑的类。
这是一个简单的案例,但在大型项目中,这可能会使依赖关系变得一团糟。