我该如何使用Maven或其他工具来查找某个依赖项的依赖项中提供特定JAR的依赖项?有时它们可能深达三到四层。
我该如何使用Maven或其他工具来查找某个依赖项的依赖项中提供特定JAR的依赖项?有时它们可能深达三到四层。
includes
参数,该参数允许指定以逗号分隔的工件列表,用于过滤序列化的依赖树,或者为 null 以不过滤依赖树。工件语法由 StrictPatternIncludesArtifactFilter
定义。以下是一个示例(我想找出在项目中从哪里获取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 withorg.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的示例(请参见此工件被用于...部分)。即使是在Java中的直接依赖关系,也至少是一个挑战。并非所有的依赖关系都是静态的,并且可以从类文件中反映出来。即使对于那些类,也没有办法获取所需的正确库以满足该依赖关系。
例如,我们有Class.forName(String className)
的方式来添加动态依赖关系,类名可以写在资源或属性文件中,也可以在运行时构造。然后,命名类可能会引入对不同库的依赖关系。
我怀疑任何工具都能够解决所有这些依赖关系。
这不是一个直接的答案,但如果您正在使用带有Maven插件的Eclipse,它可能会有所帮助。
如果我想找到一个类来自哪里,我会按照以下步骤进行:
(如果您使用Eclipse Maven的嵌套模块支持,则在多模块项目中这可能不是100%可靠。但在实践中我没有遇到问题。)