1

在我们基于 maven 的构建管道中,我们目前在 target/lib 中收集给定工件的所有依赖项,然后创建一个指向所述依赖项的空可运行 jar,然后可以像在 Eclipse 中一样调用它。

这对我们来说效果很好,但现在我想知道我们是否可以通过分发一个仅包含所需工件的 maven 存储库并有一个微型启动器来简化该过程——只需给定主工件“坐标”——可以创建一个指向主工件的类路径存储库中的工件(没有任何复制步骤)以及所有传递依赖项,然后调用main(....)?

即 Maven 本身可以做什么,但只能使用“在单个离线存储库中定位适当的工件”和“创建类路径并调用类”功能。没有网络访问权限。没有范围解析等。越小越好。

有什么建议么?

4

3 回答 3

1

我不确定,但您可以查看appassembler-maven-plugin,它将生成 shell-/batch 文件,该文件将在脚本中自动生成类路径,然后您可以将其打包到包含所有依赖项等的生成 zip 文件中. 并且您可以简单地解压缩 zip 并启动​​ bat/sh 脚本以在命令行上运行应用程序?

另一种选择可能是使用maven-exec-plugin,但它更倾向于在构建时执行 java/external 程序,但也可能适用于您的目的。

于 2013-01-04T17:28:11.920 回答
0

Appassembler Maven 插件可以做到这一点。

我用它做的一个项目是get-another-label。您可以查看它的 pom以了解它是如何工作的。

另一个解决方案是 pomstrap,它看起来像 scm:checkout on steroids:

http://pomstrap.tigris.org/

于 2013-01-04T18:37:04.247 回答
0

IMO 最简单的解决方案是阴影插件。它创建了一个“uber-JAR”,其中包含所有依赖项。

这个插件的主要缺点是如果你有非类文件位于相同的类路径位置(这在 Spring 配置文件中经常发生)。您需要告诉插件如何解决任何重叠。

可以创建一个包含所有依赖项的离线存储库。事实上,Spring 是为其培训课程这样做的。但是,要完成这项工作,您需要确保用户没有覆盖settings.xml(如果您依赖他们已经拥有 Maven,这不太可能)。但是,如果所有星星都对齐,那么就需要传递mvn:exec正确的参数了。


@ThorbjørnRavnAndersen - 你的问题似乎是关于创建一个可运行的 JAR;Maven 部分似乎是您解决问题的方法。我不确定您为什么要提供 Maven 存储库,但是从 G/A/V 到存储库位置的转换相当简单,而且您可以使用一点 XPath 来完成。或者您可以转向Aether,但这似乎违背了您的“轻量级、无网络、无版本范围”标准。

也许您可以解释为什么uber-JAR 不适合您的需求?

于 2013-01-04T17:27:36.150 回答