Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven拉取在dependency:tree中未显示的antlr jar_Java_Maven_Antlr - Fatal编程技术网

Java Maven拉取在dependency:tree中未显示的antlr jar

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.

我在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.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出现在
    .m2/repository
    中,那么这只是Maven依赖项解析过程的一部分
  • 如果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插件拉取。