java在理解maven依赖范围和类路径方面遇到了困难
假设此操作工作流:
我有我的EclipseMaven项目
我打开pom。xml,并添加范围为“runtime”的依赖项1
只要我保存pom。在xml中,eclipse将从中央存储库下载依赖项,并将其放在我的本地存储库中。m2文件夹
如果我使用libraries/maven依赖项,我会看到这个依赖项带有一个绿色图标(我想这意味着编译不需要它,如果我尝试在任何.java文件中导入该类,我会得到一个错误)
至于maven文档:“此范围表示编译时不需要依赖项,而是执行时需要依赖项。它位于运行时和测试类路径中,而不是编译类路径”
我一写导入依赖1。targetPackage.*我得到导入的“依赖关系1无法解决”,因为我想象“有人”正在寻找依赖关系1。jar在不包含它的“路径”(谁定义该路径)下
抽象概念对我来说很清楚,但它想深入了解从我将导入语句写入到文档的那一刻起发生了什么(以及是谁让它发生的)。eclipse上的java文件到了“包无法解析”的地步我还想更好地理解(但我认为这将伴随着对上述要点的理解),这是如何影响maven包装过程的。例如,我设想通过运行时依赖项下载的JAR不会实际包含在生成的可交付成果中(JAR、WAR、EAR)
谢谢你的帮助,我四处寻找了很多东西,但真的找不到一个完整的解释来填补我所有的疑问
戴维德
# 1 楼答案
作用域
runtime
的依赖项打包到最终的WAR/EAR中,但不可用于编译。如果api和impl被分成不同的JAR,则有时会使用此范围。然后,将impl标记为runtime
可以防止意外使用impl中的类