gpt4 book ai didi

java - maven 依赖关系树显示父 jar 中不存在的依赖关系?

转载 作者:行者123 更新时间:2023-11-30 08:12:46 25 4
gpt4 key购买 nike

我在我的模块上运行了 Maven dependency:tree 。这是此输出的片段。

[INFO] +- org.springframework:spring-webmvc:jar:4.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:4.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-expression:jar:4.0.2.RELEASE:compile
[INFO] | \- org.springframework:spring-web:jar:4.0.2.RELEASE:compile
[INFO] +- javax.servlet:javax.servlet-api:jar:3.0.1:provided
[INFO] +- org.apache.httpcomponents:httpcore:jar:4.3.2:compile
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.3.2:compile
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- com.fasterxml.jackson.core:jackson-core:jar:2.5.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.5.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.5.0:compile
[INFO] +- com.newrelic.agent.java:newrelic-api:jar:3.6.0:compile

我明白了transitive dependencycommons-codec:commons-codec:jar:1.6来自org.apache.httpcomponents:httpclient:jar:4.3.2 .

但我在$M2_HOME/org/apache/httpcomponents/httpclient/4.3.2/httpclient-4.3.2.jar内找不到这个 jar .

我也没有看到这个 jar 位于 Eclipse 中的“引用库”或“maven 依赖项”中。我的项目Base64Util类(class)来自 commons-codec它编译得很好。

最佳答案

依赖关系是在 POM 中定义的,如下所示:

http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.3.2/httpclient-4.3.2.pom

存在对 commons-codec 的编译依赖。它有一个对 httpcomponents-client 的父 pom 引用,它将版本定义为 1.6,如下所示:

http://central.maven.org/maven2/org/apache/httpcomponents/httpcomponents-client/4.3.2/httpcomponents-client-4.3.2.pom

所以maven输出是正确的并且将提供库。现在,如果您在代码中使用此库中的类,我建议您在 pom 中具有显式依赖项。

Maven 构建此依赖关系树来查看需要哪些库,因为每个 jar 仅包含其自己的类,而不包含依赖关系。 Maven 将验证如果多个库请求相同的依赖项,则使用一个可以与这两个库一起使用的版本。有时它找不到解决方案,并且会因依赖项解析错误而举手投足。当它有库列表时,它将下载它们并将它们放在 java 类路径中进行编译等...

这是必需的,因为普通的 java 类加载器将所有类放在同一个命名空间中。情况并非总是如此,例如servlet 容器每次 war 生成一个类加载器,osgi 容器每个包生成一个类加载器,但是所有这些系统都是有代价的:奇怪的 ClassCast 异常,因为一个类被加载到多个类加载器中。这就是 jar 不将其依赖项包含在独立的 uberjar 中的原因。 .

关于java - maven 依赖关系树显示父 jar 中不存在的依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com