如果找不到未使用的二级依赖 jar,为什么 Maven 编译器插件会失败
Why does maven compiler plugin fail if unused 2nd level dependency jar(s) are not found
我的项目具有如下所示的依赖关系:
WebApp > Level1 依赖 > Level2 依赖
假设
- WebApp 代码仅使用 类 在 Level1 依赖 jar
- level1 和 level2 依赖项都包含在编译范围内。
- 本地存储库中的 Level1 jar。我从本地存储库中删除了 Level2。
mvn compile
失败并出现错误
Could not find artifact com.example:mydeplevel2:jar:1.0-SNAPSHOT
我了解 jar/war 打包插件需要遍历整个层次结构才能确定传递依赖项。
但是为什么编译器插件会报错呢?毕竟,即使满足所有 level2 依赖项,我也只看到 MyWebApp.class 内置在目标文件夹中。我可以用 javac -cp MyWebApp.java.
构建 MyWebApp.class
您声明,对于您的项目:
WebApp code uses only classes in Level1 dependency jar
Maven 没有做出这样的假设,而且它不适用于许多实际项目。 Maven 确保在编译时存在依赖项的传递闭包,并且不会尝试识别任何不必要的依赖项。
是确认是否列出了所有直接依赖项的好方法,但 Maven 并不假定您的项目通过了此检查。
我的项目具有如下所示的依赖关系:
WebApp > Level1 依赖 > Level2 依赖
假设
- WebApp 代码仅使用 类 在 Level1 依赖 jar
- level1 和 level2 依赖项都包含在编译范围内。
- 本地存储库中的 Level1 jar。我从本地存储库中删除了 Level2。
mvn compile
失败并出现错误
Could not find artifact com.example:mydeplevel2:jar:1.0-SNAPSHOT
我了解 jar/war 打包插件需要遍历整个层次结构才能确定传递依赖项。
但是为什么编译器插件会报错呢?毕竟,即使满足所有 level2 依赖项,我也只看到 MyWebApp.class 内置在目标文件夹中。我可以用 javac -cp MyWebApp.java.
构建 MyWebApp.class您声明,对于您的项目:
WebApp code uses only classes in Level1 dependency jar
Maven 没有做出这样的假设,而且它不适用于许多实际项目。 Maven 确保在编译时存在依赖项的传递闭包,并且不会尝试识别任何不必要的依赖项。