有没有类似于rpm --whatprovides的Maven等效工具来查找jar文件提供者?

5

我该如何使用Maven或其他工具来查找某个依赖项的依赖项中提供特定JAR的依赖项?有时它们可能深达三到四层。

4个回答

2
我想你正在寻找以下内容:

我猜您正在寻找:

mvn dependency:tree

编辑:有更多可用的选项来分析依赖项。请查看文档


刚好赶在我前面了。这里有一些示例输出:http://docs.codehaus.org/display/MAVENUSER/Dependency+Mechanism - JoseK

2
如果您想找出给定项目中传递依赖项的来源,则Maven Dependency Plugin确实是您的好帮手。使用它并结合 includes 参数,该参数允许指定以逗号分隔的工件列表,用于过滤序列化的依赖树,或者为 null 以不过滤依赖树。工件语法由 StrictPatternIncludesArtifactFilter 定义。
至于语法方面,javadoc 写道:

The artifact pattern syntax is of the form

[groupId]:[artifactId]:[type]:[version]

Where each pattern segment is optional and supports full and partial * wildcards. An empty pattern segment is treated as an implicit wildcard.

For example, org.apache.* would match all artifacts whose group id started with org.apache., and :::*-SNAPSHOT would match all snapshot artifacts.

以下是一个示例(我想找出在项目中从哪里获取activation工件):
$ mvn dependency:tree -Dincludes=:activation::
[INFO] 扫描项目中...
[INFO] ------------------------------------------------------------------------
[INFO] 正在构建 Java EE 6 Demo - Petstore - Domain
[INFO]    task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] name.thivent.samples.javaee6.domain:domain:jar:1.0-SNAPSHOT
[INFO] \- org.hibernate:hibernate-validator:jar:4.0.2.GA:runtime
[INFO]    \- javax.xml.bind:jaxb-api:jar:2.1:runtime
[INFO]       \- javax.activation:activation:jar:1.1:runtime
[INFO] ------------------------------------------------------------------------
...
如果您正在使用M2Eclipse,则可以使用它提供的dependency:tree的良好前端。
对于更接近rpm --whatprovides(即不搜索特定项目),您必须使用存储库搜索引擎。以下是activation-1.1.jar的示例(请参见此工件被用于...部分)。

0

即使是在Java中的直接依赖关系,也至少是一个挑战。并非所有的依赖关系都是静态的,并且可以从类文件中反映出来。即使对于那些类,也没有办法获取所需的正确库以满足该依赖关系。

例如,我们有Class.forName(String className)的方式来添加动态依赖关系,类名可以写在资源或属性文件中,也可以在运行时构造。然后,命名类可能会引入对不同库的依赖关系。

我怀疑任何工具都能够解决所有这些依赖关系。


0

这不是一个直接的答案,但如果您正在使用带有Maven插件的Eclipse,它可能会有所帮助。

如果我想找到一个类来自哪里,我会按照以下步骤进行:

  1. 选择类名并使用F3快捷键将源代码加载到编辑器窗口中。
  2. 使用“显示在>包资源管理器”定位文件(通常位于构建路径的Maven依赖项部分)。
  3. 查看封装依赖“文件夹”的JAR文件名,并读取组ID、工件ID和版本。

(如果您使用Eclipse Maven的嵌套模块支持,则在多模块项目中这可能不是100%可靠。但在实践中我没有遇到问题。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接