Maven中依赖jar文件的列表

时间:2008-11-10 17:36:12

标签: java maven-2 dependencies classpath

使用Maven 2,有没有一种方法可以将jar依赖项列为文件名?

mvn dependency:build-classpath 

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

所以我需要的列表就像

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文件(很容易googleble)。我问的是如何获取我想写的数据,即上面显示的列表。

9 个答案:

答案 0 :(得分:68)

此命令将生成您的maven项目的依赖关系树:

$ mvn dependency:tree

我相信你会喜欢这样的结果: - )

答案 1 :(得分:17)

尽我所知,你无法使用逗号和空格来获得完全输出。无论是通过命令行还是通过pom.xml文件,如果指定空格或''(空字符串)作为pathSeparator或{{1的替代符号',maven-dependency-plugin或CLI都会吓坏}}。所以,你可能被迫达成妥协。你可以

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

但是,这应该会为您提供一个完整列表,以fileSeparator而不是'::'分隔,但它可以正常工作。如果您运行:

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

将此附加到','阶段,稍后通过在生命周期的generate-resources阶段设置正确的属性来过滤该资源,你应该能够得到逗号。

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

答案 2 :(得分:8)

这是你要求的命令

$ mvn dependency:tree

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

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

$ mvn dependency:tree | findstr javax.persistence

以下是您在Linux上的表现方式:

$ mvn dependency:tree | grep javax.persistence

Maven to filter the dependency tree(适用于Windows cmd,MacOS和Linux shell):

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

Maven方式(Windows PowerShell):

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

答案 3 :(得分:5)

你看过Apache Felix项目了吗?它有一大堆插件,包括bundle plugin应该做你想要的。

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

<manifestFile>

答案 4 :(得分:4)

实际上,对于最终的罐子清单,只需使用

即可
mvn dependency:list

哪个比依赖更简单:树只是简单地获取最终列表,因为它显示详细的传递树和冲突解决(详细)。

答案 5 :(得分:2)

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

这是Maven存档插件的配置。

答案 6 :(得分:2)

我可能在这里遗漏了一些东西,但是因为你已经使用了复制依赖,所以你真正想到的只是指定目录中的文件列表。

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

答案 7 :(得分:1)

要为现有答案添加缺口,当前的maven-dependency-plugin允许将类路径保存到具有outputProperty参数的属性。

答案 8 :(得分:0)

这是一个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]
}