使用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)。我问的是如何获取我想写的数据,即上面显示的列表。
答案 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]
}