当前位置: 代码迷 >> java >> 是否有相当于rpm的maven - 为jar文件提供什么?
  详细解决方案

是否有相当于rpm的maven - 为jar文件提供什么?

热度:34   发布时间:2023-07-31 11:22:06.0

我如何使用maven或其他工具来查找提供特定jar的依赖项的哪个依赖项? 有时他们有三到四个依赖关系。

我想你在寻找:

mvn dependency:tree

编辑:有更多选项可用于分析依赖项。 看看

如果你想从给定项目中找出传递依赖的来源,那么确实是你的朋友。 将它与参数一起使用,该参数允许指定以逗号分隔的工件列表以过滤序列化的依赖关系树,或者为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 (即不搜索特定项目),您将不得不使用 。 以下是的示例(请参阅此工件由......部分使用)。

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

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

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

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

如果我想找到一个班级的来源,我会做以下事情:

  1. 选择类名并使用F3快捷方式将源代码加载到“编辑器”窗口中。
  2. 使用“Show In> Package Explorer”在(通常)构建路径的Maven Dependencies部分中找到该文件。
  3. 查看封闭依赖项“文件夹”的JAR文件名,并读取组ID,工件ID和版本。

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