98

使用 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)。我在问如何获取我想要写入的数据,即上面显示的列表。

4

9 回答 9

116

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

$ mvn dependency:tree

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

于 2010-05-14T13:09:25.053 回答
22

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

mvn dependency:list

这比 dependency:tree 简单得多,因为它显示了详细的传递树和冲突解决方案(带有详细信息),所以简单地获取最终列表是一种过大的杀伤力。

这是附加参数的文档

于 2018-03-30T18:52:08.110 回答
21

据我所知,您无法获得准确的输出,只有逗号且没有空格。pathSeparator无论是通过命令行还是通过 pom.xml 文件,如果您指定空格或''(空字符串)作为替代,maven-dependency-plugin 或 CLI 都会崩溃fileSeparator。因此,您可能被迫达成某种妥协。你可以

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

但是,这应该会给你一个完整的列表,用 分隔'::'而不是 just ',',但它确实有效。如果你运行:

    mvn 依赖: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

于 2009-04-02T06:06:03.363 回答
19

这是您要的命令

$ 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:*'
于 2017-11-24T13:50:46.280 回答
4

你看过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>
于 2008-11-10T17:45:51.460 回答
3

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

Ant 可以毫无问题地为您做到这一点,shell 脚本也可以。

于 2010-01-09T01:05:55.643 回答
2

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

它是 Maven 存档插件的配置。

于 2008-11-10T17:44:10.400 回答
1

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

于 2013-08-16T00:24:19.457 回答
1

这是一个用于管道的 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]
}   
于 2019-09-02T11:06:44.057 回答