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