Java Maven拉取在dependency:tree中未显示的antlr jar
我在Maven/Java项目中有多个版本的Java Maven拉取在dependency:tree中未显示的antlr jar,java,maven,antlr,Java,Maven,Antlr,我在Maven/Java项目中有多个版本的antlr,我试图了解项目的pom.xml中的哪个依赖关系是哪个版本 在我的.m2目录下,我看到三个不同的antlr版本: ~/.m2/repository/antlr/antlr/2.7.2/antlr-2.7.2.jar ~/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar ~/.m2/repository/.../org.apache.servicemix.bundles.antlr-2.7.7_5.
antlr
,我试图了解项目的pom.xml
中的哪个依赖关系是哪个版本
在我的.m2目录下,我看到三个不同的antlr
版本:
~/.m2/repository/antlr/antlr/2.7.2/antlr-2.7.2.jar
~/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar
~/.m2/repository/.../org.apache.servicemix.bundles.antlr-2.7.7_5.jar
如果我跑
$ mvn dependency:tree
从项目的根目录,我得到:
[INFO] +- org.apache.directory.api:api-all:jar:2.0.0.AM2:compile
[INFO] | +- ...:org.apache.servicemix.bundles.antlr:jar:2.7.7_5:compile
...
[INFO] +- org.hibernate:hibernate-agroal:pom:5.3.7.Final:compile
[INFO] | +- io.agroal:agroal-pool:jar:0.4:compile
[INFO] | +- org.hibernate:hibernate-core:jar:5.3.7.Final:compile
...
[INFO] | | +- antlr:antlr:jar:2.7.7:compile
因此,Maven找到了版本2.7.7_5
(由org.apache.directory.api:api all
)和版本2.7.7
(由org.hibernate:hibernate agrol
)但没有版本2.7.2
。此版本未直接列在项目pom.xml
中
我删除了文件夹.m2/repository/antlr/antlr/2.7.2
,然后运行
$ mvn compile
从项目的根文件夹。这将立即再次下载2.7.2版:
[INFO] Scanning for projects...
...
Downloading from central: https://repo.maven.apache.org/maven2/antlr/antlr/2.7.2/antlr-2.7.2.pom
Downloaded from central: https://repo.maven.apache.org/maven2/antlr/antlr/2.7.2/antlr-2.7.2.pom (145 B at 331 B/s)
同样,mvn-dependency:tree
也没有显示2.7.2版的任何内容。这怎么可能?为什么mvn要拉一个JAR版本,而这个版本没有显示在项目的依赖项中?如何找出pom.xml
文件中的哪个依赖项正在拉取这个JAR文件
在过去的三个小时里,我一直在搜索文档,但目前没有任何线索。依赖项也可以来自插件,请尝试运行
依赖项:解析插件
来解析所有插件及其依赖项:
mvn dependency:resolve-plugins
除此之外,您还可以使用
-X
选项运行mvn
进行调试。两种主要的可能性:
- 如果只有POM出现在
中,那么这只是Maven依赖项解析过程的一部分.m2/repository
- 如果POM和JAR出现,并且JAR不在依赖关系树中,那么maven插件可能会将JAR拉入
.m2/repository
通常,如果您在本地存储库中发现意外的jar,则无需担心。谢谢您的提示。问题是Hibernate然后选择错误的版本并抛出异常。因此,如果它是一个插件,我想知道是哪一个:也许我可以升级该插件,它将使用库的更新版本。但是hibernate如何从本地存储库中选择一个版本呢?这似乎很奇怪。本地存储库只是一个缓存,它不在类路径上。确定。我必须退一步:错误发生在Eclipse中调试时。由于Eclipse是通过Maven插件从
pom.xml
文件获取其项目依赖项的,因此我假设Eclipse中使用的依赖项应该与Maven报告的依赖项相同。因此,我在命令行中使用了Maven来显示依赖项。是的,在命令行中,版本2.7.2
由两个Maven插件拉入。您是否在Maven构建中调试?谢谢提示。(+1)在命令行上,该版本由一些maven插件拉取。