Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于CLI的maven工件启动器:基于repo中的工件创建类路径并调用main(…)?_Java_Maven_Executable Jar - Fatal编程技术网

Java 基于CLI的maven工件启动器:基于repo中的工件创建类路径并调用main(…)?

Java 基于CLI的maven工件启动器:基于repo中的工件创建类路径并调用main(…)?,java,maven,executable-jar,Java,Maven,Executable Jar,在我们基于maven的构建管道中,我们当前在target/lib中收集给定工件的所有依赖项,然后创建一个指向所述依赖项的空可运行jar,然后可以用与Eclipse中相同的方式调用该jar 这对我们来说效果很好,但是现在我想知道我们是否可以通过分发一个只包含所需工件的maven存储库来简化这个过程,并且有一个小型的启动器,只要给主工件“坐标”,它就可以创建一个指向存储库中主工件的类路径(无需任何复制步骤)以及所有可传递的依赖项,然后调用main(..) 也就是说,Maven本身可以做什么,但只能使

在我们基于maven的构建管道中,我们当前在target/lib中收集给定工件的所有依赖项,然后创建一个指向所述依赖项的空可运行jar,然后可以用与Eclipse中相同的方式调用该jar

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

也就是说,Maven本身可以做什么,但只能使用“在单个脱机存储库中定位适当的工件”和“创建类路径并调用类”功能。没有网络接入。无距离分辨率等。越小越好


有什么建议吗?

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

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

您可以创建包含所有依赖项的脱机存储库。事实上,Spring在其培训班上就是这样做的。但是,要做到这一点,您需要确保用户没有覆盖的
settings.xml
(如果您依赖它们已经有了Maven,这是不可能的)。但是,如果星星都对齐,就需要传递正确的参数


@Thorbjørnravandersen-你的问题似乎是关于创建一个可运行的罐子;Maven部分似乎是解决方案的方法。我不确定您为什么要交付Maven存储库,但从G/a/V到存储库位置的转换相当简单,您可以使用一些XPath。或者你可以求助于,但这似乎违背了你的“轻量级、无网络、无版本范围”标准


也许你可以解释一下为什么优步JAR不适合你的需要?

在我看来,最简单的解决方案就是插件。它创建了一个“uber JAR”,其中包含所有的依赖项

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

您可以创建包含所有依赖项的脱机存储库。事实上,Spring在其培训班上就是这样做的。但是,要做到这一点,您需要确保用户没有覆盖的
settings.xml
(如果您依赖它们已经有了Maven,这是不可能的)。但是,如果星星都对齐,就需要传递正确的参数


@Thorbjørnravandersen-你的问题似乎是关于创建一个可运行的罐子;Maven部分似乎是解决方案的方法。我不确定您为什么要交付Maven存储库,但从G/a/V到存储库位置的转换相当简单,您可以使用一些XPath。或者你可以求助于,但这似乎违背了你的“轻量级、无网络、无版本范围”标准


也许您可以解释一下为什么uber JAR不适合您的需要?

我不确定,但您可以看看将生成的shell-/batch文件,该文件将在脚本中自动生成类路径,然后您可以将其打包到包含所有依赖项等的结果zip文件中,您只需解压缩zip文件即可并启动bat/sh脚本以在命令行上运行应用程序


另一个选项可能是使用,但它更倾向于在构建时执行java/外部程序,但可能也适用于您的目的。

我不确定,但您可以查看将生成的shell-/batch文件,该文件将在脚本内自动生成类路径,然后可以打包您可以简单地解压zip并启动bat/sh脚本,以便在命令行上运行应用程序

另一个选项可能是使用,但它更倾向于在构建时执行java/外部程序,但可能也适用于您的目的。

我用它做的一个项目是获得另一个标签。你可以试着了解它是如何工作的

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

这是一个好办法

我用它做的一个项目是获得另一个标签。你可以试着了解它是如何工作的

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


谢谢你的回答,但我认为你不理解我的问题。我对uber JAR不感兴趣,但对一个小的运行时启动器感兴趣。谢谢你的回答,但我认为你不理解我的问题。我对uber JAR不感兴趣,而是一个小型的运行时启动器。谢谢你的回答,但我正在寻找一个小型的替代品来替代完整的maven可执行文件,而不是脚本(目标平台不支持简单的脚本编写,但很容易调用可运行的JAR)谢谢你的回答,但是我正在寻找一个完整的maven可执行文件的小型替代品,而不是脚本(目标平台不支持简单的脚本,但是调用可运行的jar很容易)