我正在尝试理解一个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>
但它不存在。那么我怎样才能找到两个包装之间的墨水。如果我的理解是错误的,请纠正我。
答案 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放弃了这一点。