![](/img/trans.png)
[英]<Maven>How to add class files as dependency (not jar) in maven project?
[英]List of dependency jar files in Maven
使用 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 搜索)。 我在问如何获取我要写入的数据,即上面显示的列表。
此命令将生成 Maven 项目的依赖关系树:
$ mvn dependency:tree
我相信你会喜欢这个结果:-)
尽我所知,您无法获得准确的输出,其中包含逗号且没有空格。 无论是通过命令行还是通过 pom.xml 文件,如果您指定空格或 ''(空字符串)作为pathSeparator
或fileSeparator
的替代品,maven-dependency-plugin 或 CLI pathSeparator
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
这是你要求的命令
$ 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项目吗? 它有一大堆插件,包括一个可以做你想做的插件。
另外,您是否尝试过带有<manifestFile>
的<addClasspath>
标签? 这应该具有将类路径合并到清单中的预期效果。
<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>
我可能在这里遗漏了一些东西,但是由于您已经使用了复制依赖项,因此听起来您真正想要的只是指定目录中的文件列表。
Ant 可以毫无问题地为您执行此操作,shell 脚本也可以。
Maven 可以自动在您的清单中构建类路径: http : //maven.apache.org/guides/mini/guide-manifest.html
它是 Maven 归档插件的配置。
要为现有答案添加一个缺口,当前的 maven-dependency-plugin 允许使用outputProperty
参数将类路径保存到属性。
这是一个用于管道mvn dependency:list
的 awk 脚本:
mvn dependency:list | awk -f mvnfmt.awk
你可以| sort
| sort
如果你想按名称排序,或者| tr '\\n' ':'
| 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]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.