8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Maven 中的依赖 jar 文件列表

André Lehto 2月前

137 0

使用 Maven 2,有没有办法可以仅列出文件名形式的 jar 依赖项?mvn dependency:build-classpath 可以列出 jar 文件,但是这将包括它们所在位置的完整路径...

使用 Maven 2,有没有办法可以仅列出 jar 依赖项作为文件名?

mvn dependency:build-classpath 

可以列出 jar 文件,但这将包括它们在我的本地存储库中的完整路径。我所需要的本质上只是一个文件名列表(或 copy-dependencies 目标复制的文件名)。

所以我需要的列表应该是这样的

activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc...

理想情况下作为 maven 属性,但我猜想,诸如 build-classpath 之类的文件可以生成就可以了。

我想要实现的是将 Bundle-ClassPath 一个 OSGi 包写入一个手动维护的 MANIFEST.MF 文件。 (您不需要理解这一点就可以回答这个问题。)

澄清一下:问题在于如何将清单标头写入 jar 中的 MANIFEST.MF 文件(这很容易在 Google 上找到)。我问的是如何获取我想要写入的数据,即上面显示的列表。

帖子版权声明 1、本帖标题:Maven 中的依赖 jar 文件列表
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由André Lehto在本站《maven》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 只需提交依赖插件的补丁,我就会将其应用于下一个版本。构建类路径最接近您想要的,我们只需要调整选项即可获得所需的输出。

  • 此命令将生成你的 Maven 项目的依赖树:

    $ mvn dependency:tree
    

    我确信你会喜欢这个结果:-)

  • 我认为帮助输出仅适用于 mvn 二进制文件,而不适用于可用目标的文档。除了可以使用自动完成功能(需要手动激活)之外,最好有一个可用目标/任务列表。.com/questions/3996802/…

  • '我相信你会喜欢这个结果:-)' - 如果输出大小是大数据的话就不是那么好了。

  • bboy 2月前 0 只看Ta
    引用 6

    实际上,对于最终的 jar 列表,只需使用

    mvn dependency:list
    

    这比依赖关系:树简单得多,因为它显示了详细的传递树和冲突解决(冗长),所以简单地获取最终列表是一种过度的操作。

    这是 附加参数的文档

  • 如果您希望对它们进行排序:mvn dependency:list -Dsort=true

  • 据我所知,您无法获得完全相同的输出,即带有逗号而没有空格。无论是通过命令行还是通过 pom.xml 文件,如果您用 或 指定空格或 ''(空字符串)作为替代,maven-dependency-plugin 或 CLI 都会出错 pathSeparat。 or fileSeparator 因此,您可能被迫达成某种妥协。您可以

        mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath
    

    但是,这样会得到一个完整的列表,以 分隔, '::' 而不是仅仅以 分隔 ',' ,但这样是可行的。如果您运行:

        mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath
    

    并将 其附加到 generate-resources 阶段生命周期的阶段 process-resources 设置正确的属性来过滤该资源 应该 能够只得到逗号。

    您可以在以下位置查看完整的选项列表: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

  • 很好的答案!如果您使用 -Dmdep.pathSeparator=',' -Dmdep.prefix='.' -Dmdep.fileSeparator='/',您将获得一个以逗号分隔的相对文件名列表,例如 ./file1.jar,./file2.jar,这样就无需进行过滤。

  • 这是你请求的命令

    $ mvn dependency:tree
    

    对于大型项目,它可以输出大量文本。我假设您想检查依赖关系树是否包含某个依赖关系,因此您不需要完整列表。

    以下是在 Windows 上过滤输出的方法:

    $ mvn dependency:tree | findstr javax.persistence
    

    在 Linux 上你可以这样做:

    $ mvn dependency:tree | grep javax.persistence
    

    Maven 过滤依赖树的 (适用于 Windows cmd、MacOS 和 Linux shell):

    $ mvn dependency:tree -Dincludes=javax.persistence:*
    

    Maven 方式(Windows PowerShell):

    $ mvn dependency:tree '-Dincludes=javax.persistence:*'
    
  • 你看过 Apache Felix 项目吗?它有一大堆插件,包括一个 可以满足你需求的 捆绑插件

    另外,您是否尝试过 <addClasspath> 使用标签 <manifestFile> ?这应该具有将类路径合并到清单中的预期效果。

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      ...
      <configuration>
        <archive>
          <addClasspath>true</addClasspath>
          <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
      </configuration>
      ...
    </plugin>
    
  • 我知道 Apache Felix,但它不能满足我的需要,这就是我手动执行此操作的原因。

  • addClasspath 会将 jar 列表添加到 Class-Path 清单标头,我没有看到 maven-jar-plugin 文档提到能够将类路径放入其他标头。此外,Bundle-Classpath 需要的不仅仅是 jar 列表。

  • 我可能在这里遗漏了一些东西,但是由于您已经使用了复制依赖项,所以听起来您真正想要的只是指定目录中的文件列表。

    Ant 可以毫无问题地为您完成此操作,就像 shell 脚本一样。

  • Maven 可以自动在清单中构建类路径: http://maven.apache.org/guides/mini/guide-manifest.html

    这是 Maven 档案插件的配置。

  • 为了给现有答案增添亮点,当前的 maven-dependency-plugin 允许使用 outputProperty 参数将类路径保存到属性中。

  • 引用 17

    以下是用于管道的 awk 脚本 mvn dependency:list :

    mvn dependency:list | awk -f mvnfmt.awk
    

    您可以 | sort 按名称排序,或者 | tr '\n' ':' 将其格式化为类路径。

    mvnfmt.awk 是:

    BEGIN {
        found = 0
    }
    
    /The following files have been resolved/ {
        found = 1
        next
    }
    
    /^\[INFO\] \$/ {
        print "Empty " found
        if (found != 0) found = 0
    }
    
    {
        if (!found) next
        n = split($0, a, " ")
        if (n != 2) {
            found = 0
            next
        }
        split(a[2], a, ":")
        print a[2] "-" a[4] "." a[3]
    }   
    
返回
作者最近主题: