问题描述
我如何使用maven或其他工具来查找提供特定jar的依赖项的哪个依赖项? 有时他们有三到四个依赖关系。
1楼
我想你在寻找:
mvn dependency:tree
编辑:有更多选项可用于分析依赖项。 看看
2楼
如果你想从给定项目中找出传递依赖的来源,那么确实是你的朋友。
将它与参数一起使用,该参数允许指定以逗号分隔的工件列表以过滤序列化的依赖关系树,或者为null以不过滤依赖关系树。
工件语法由StrictPatternIncludesArtifactFilter
定义 。
关于语法,javadoc写道:
工件模式语法是形式
[groupId]:[artifactId]:[type]:[version]
每个模式段都是可选的,并支持完整和部分
*
通配符。 空模式段被视为隐式通配符。例如,
org.apache.*
将匹配组ID以org.apache.
开头的所有工件org.apache.
,和:::*-SNAPSHOT
将匹配所有快照工件。
这是一个示例(我想从项目中找到activation
工件的来源):
$ mvn dependency:tree -Dincludes=:activation:: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building 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
提供了一个很好的前端dependency:tree
如果你正在使用它。
对于“更接近” rpm --whatprovides
(即不搜索特定项目),您将不得不使用 。
以下是的示例(请参阅此工件由......部分使用)。
3楼
即使对于Java中的直接依赖,它至少也是一个挑战。 并非所有依赖项都是静态的,可以从类文件中反映出来。 即使对于那些类,也无法获得满足该依赖性所需的正确库。
例如,我们有添加动态依赖关系的Class.forName(String className)
方法,类名可以写在资源或属性文件中,也可以在运行时构造。
然后,命名类可以将依赖引入不同的库。
我怀疑任何工具都能够解决所有这些依赖关系。
4楼
这不是一个直接的答案,但如果您使用带有Maven插件的Eclipse,它可能会有所帮助。
如果我想找到一个班级的来源,我会做以下事情:
- 选择类名并使用F3快捷方式将源代码加载到“编辑器”窗口中。
- 使用“Show In> Package Explorer”在(通常)构建路径的Maven Dependencies部分中找到该文件。
- 查看封闭依赖项“文件夹”的JAR文件名,并读取组ID,工件ID和版本。
(如果您使用Eclipse Maven的嵌套模块支持,这在多模块项目中可能不是100%可靠。但我在实践中没有遇到问题。)