Java 理解maven依赖关系

Java 理解maven依赖关系,java,maven,Java,Maven,我试图理解一个java代码包(我们称之为mainPackage),它有一个来自另一个包的导入(我们称之为commonUtility)。我可以看到import语句,但不能直接在pom文件中看到依赖项。我只需要理解这一点,就可以对commonUtility进行一些更改,以便它能够反映在我的mainPackage jar中 例如,我可以在mainPackage类文件中看到import语句 import com.training.tdw.commonUtility.transform; 所以我期待着看

我试图理解一个java代码包(我们称之为mainPackage),它有一个来自另一个包的导入(我们称之为commonUtility)。我可以看到import语句,但不能直接在pom文件中看到依赖项。我只需要理解这一点,就可以对commonUtility进行一些更改,以便它能够反映在我的mainPackage jar中

例如,我可以在mainPackage类文件中看到import语句

import com.training.tdw.commonUtility.transform;
所以我期待着看到

<dependency>
  <groupId>com.training.tdw</groupId>
  <artifactId>commonUtility</artifactId>
  <version>1.0.1</version>
</dependency>

com.training.tdw
公用事业
1.0.1

但它并不存在。那么,我将如何找出两个包装之间的墨水。如果我的理解有误,请纠正我。

您可以使用
依赖关系:树
目标来找到它。试着跑步

mvn dependency:tree -Dverbose -Dincludes=com.training.*
这假设组id包含
com.training
,但是它的名称可能很愚蠢,您可以通过删除
-Dincludes
并手动查找来运行完整的依赖关系树


或者,如果您使用IDE,您可以导航到该包中的类,并且应该有一个选项在项目/包资源管理器中显示它。从这里您可以确定JAR文件名,该文件名应与maven包工件id相对应。

JAR可以具有任意GAV(groupId、artifactId、version),并且它不需要连接到您导入的包。当然,许多人是以groupId开始他们的包名的,但是其他人不是这样。一般来说,没有直接的方法可以从给定的包推断出必要的(或使用过的)jar


如果您使用的是Nexus2(或MavenCentral),则有一个名为“Classname search”的功能,允许您搜索(限定的)类名,并获得包含此类的JAR。不幸的是,Nexus3已经放弃了这一点。

在pom.xml中定义的依赖项似乎至少有一个依赖于com.training.tdw.commonUtility:1.0.1

因此,您不需要在pom.xml中显式指定com.training.tdw.commonUtility:1.0.1依赖项。这是自Maven 2以来出现的“可传递依赖项”特性的本质

可传递依赖项是Maven 2.0中的一个新特性。这允许 您需要避免发现和指定您的 自己的依赖项需要,并自动包含它们

见:

  • 请注意,“测试”范围不是可传递的
不清楚你在问什么。Maven处理可传递的依赖关系,例如,如果pom文件中的PackageA依赖于PackageB,则PackageB可用于代码。也就是说,不显式定义PackageB版本可能会很有趣,因为如果您对PackageA进行修订,它可能会从您的下面发生更改。@DaveNewton-我已经给出了一个示例。任何帮助都将不胜感激。我告诉过你:Maven如何处理可传递依赖项。隐式依赖项既可用于项目,也可用于显式依赖项。正如答案所说,您可以公开整个依赖关系树。但是依赖隐式依赖在某些情况下可能会产生后果。可能重复谢谢,我更改了commonUtility的版本,并包含了依赖详细信息(版本id、组id和工件id)。我在这三个版本中都进行了mvn清理安装,这些更改都反映在mainPackage中。这确实有帮助。我可以在jar文件中看到依赖关系树。我将阅读更多关于传递依赖的内容。谢谢