【问题标题】:Is there a maven equivalent of rpm --whatprovides for a jar file?是否有 rpm --whatprovides 的 Maven 等效项用于 jar 文件?
【发布时间】:2011-03-10 00:57:32
【问题描述】:

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

【问题讨论】:

    标签: java maven-2 jar dependencies


    【解决方案1】:

    如果您想找出传递依赖项来自哪里对于给定项目,那么Maven Dependency Plugin 确实是您的朋友。将它与includes 参数一起使用,该参数允许指定以逗号分隔的工件列表来过滤序列化的依赖树,或者为null 不过滤依赖树。工件语法由StrictPatternIncludesArtifactFilter 定义。

    关于语法,javadoc 写道:

    工件模式语法是 表格

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

    每个模式段都是可选的 并支持全部和部分 * 通配符。一个空 模式段被视为 隐式通配符。

    例如,org.apache.* 将 匹配组 id 的所有工件 以org.apache. 开头,并且 :::*-SNAPSHOT 将匹配所有 快照工件。

    这是一个示例(我想从项目中找到 activation 工件的来源):

    $ mvn 依赖:树 -Dincludes=:activation:: [INFO] 正在扫描项目... [信息] --------------------------------------------- ------------------------- [信息] 构建 Java EE 6 演示 - Petstore - 域 [INFO] 任务段:[依赖:树] [信息] --------------------------------------------- ------------------------- [信息] [依赖:树{执行:默认-cli}] [信息] name.thivent.samples.javaee6.domain:domain:jar:1.0-SNAPSHOT [信息] \- org.hibernate:hibernate-validator:jar:4.0.2.GA:runtime [信息] \- javax.xml.bind:jaxb-api:jar:2.1:runtime [信息] \- javax.activation:activation:jar:1.1:runtime [信息] --------------------------------------------- ------------------------- ...

    M2Eclipse 为dependency:tree 提供了一个不错的前端(如果您正在使用它)。

    对于“更接近”rpm --whatprovides 的内容(即不搜索特定项目),您必须使用 repository search engine。这是activation-1.1.jar 的示例(参见This artifact is used by ...部分)。

    【讨论】:

      【解决方案2】:

      我想你正在寻找:

      mvn dependency:tree
      

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

      【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        如果我想查找某个类的来源,我会执行以下操作:

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

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

        【讨论】:

          猜你喜欢
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-13
          • 2011-08-04
          • 2016-09-05
          • 2013-01-31
          • 1970-01-01
          相关资源
          最近更新 更多