【发布时间】:2011-03-10 00:57:32
【问题描述】:
如何使用 maven 或其他工具来查找提供特定 jar 的依赖项的哪个依赖项?有时它们是三四个深度的依赖关系。
【问题讨论】:
标签: java maven-2 jar dependencies
如何使用 maven 或其他工具来查找提供特定 jar 的依赖项的哪个依赖项?有时它们是三四个深度的依赖关系。
【问题讨论】:
标签: java maven-2 jar dependencies
如果您想找出传递依赖项来自哪里对于给定项目,那么Maven Dependency Plugin 确实是您的朋友。将它与includes 参数一起使用,该参数允许指定以逗号分隔的工件列表来过滤序列化的依赖树,或者为null 不过滤依赖树。工件语法由StrictPatternIncludesArtifactFilter 定义。
关于语法,javadoc 写道:
工件模式语法是 表格
[groupId]:[artifactId]:[type]:[version]每个模式段都是可选的 并支持全部和部分
*通配符。一个空 模式段被视为 隐式通配符。例如,
org.apache.*将 匹配组 id 的所有工件 以org.apache.开头,并且:::*-SNAPSHOT将匹配所有 快照工件。
这是一个示例(我想从项目中找到 activation 工件的来源):
M2Eclipse 为dependency:tree 提供了一个不错的前端(如果您正在使用它)。
对于“更接近”rpm --whatprovides 的内容(即不搜索特定项目),您必须使用 repository search engine。这是activation-1.1.jar 的示例(参见This artifact is used by ...部分)。
【讨论】:
【讨论】:
即使对于 Java 中的直接依赖,这至少也是一个挑战。并非所有依赖项都是静态的,并且可以从类文件中反映出来。即使对于那些类,也无法获得满足这种依赖性所需的正确库。
例如,我们有 Class.forName(String className) 添加动态依赖项的方式,类名可以写入资源或属性文件或在运行时构建。然后命名类可以将依赖项引入不同的库。
我怀疑任何工具都能够解决所有这些依赖关系。
【讨论】:
这不是一个直接的答案,但如果您将 Eclipse 与 Maven 插件一起使用,它可能会有所帮助。
如果我想查找某个类的来源,我会执行以下操作:
(如果您使用 Eclipse Maven 的嵌套模块支持,这在多模块项目中可能不是 100% 可靠。但我在实践中没有遇到问题。)
【讨论】: