了解maven依赖关系

时间:2017-08-15 16:55:09

标签: java maven

我正在尝试理解一个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>

但它不存在。那么我怎样才能找到两个包装之间的墨水。如果我的理解是错误的,请纠正我。

3 个答案:

答案 0 :(得分:1)

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

因此,您不需要在pom.xml中明确指定 com.training.tdw.commonUtility:1.0.1 依赖项。这是自Maven 2以来出现的“Transitive dependencies”特征的本质。

  

传递依赖是Maven 2.0中的一项新功能。这允许   你要避免需要发现和指定你的库   自己的依赖项需要,并自动包含它们。

请参阅:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

  • 请注意,“测试”范围不具有传递性!

答案 1 :(得分:0)

您可以使用dependency:tree目标来查找它。尝试运行

mvn dependency:tree -Dverbose -Dincludes=com.training.*

这假定组ID包含com.training,但是它可能被命名为愚蠢的东西,您可以通过删除-Dincludes并手动查看来运行完整的依赖关系树。

或者,如果您使用IDE,则可以导航到该包内的类,并且应该有一个选项可以在项目/包浏览器中显示它。从那里你可以确定JAR文件名,它应该对应于maven包工件id

答案 2 :(得分:0)

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

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