【问题标题】:Automatically download and run standalone Java app from Maven从 Maven 自动下载并运行独立的 Java 应用程序
【发布时间】:2011-06-02 22:14:27
【问题描述】:

我想要一个应用程序/脚本,我可以使用它从给定的 Maven 工件执行独立的 Java 应用程序(即具有 main 方法的基本类)。根据我的研究,目前不存在这样的情况,但我想我会向社区提出这个问题,看看是否有人知道可以满足我需求的项目。

我的想法是,我将通过配置文件或命令行传入 Maven 工件规范(组 ID、工件 ID 和版本)以及完全限定的类名和参数列表。然后将下载给定的工件及其所有依赖项(如果它们已经在本地存储库中,则不下载),并使用适当的类路径启动应用程序。

在这一点上,我认为使用 Aether library 和 Java 的 ProcessBuilder 来实现一个系统不会太难,但我想知道是否有其他人知道在我之前已经处理过这个的现有项目开始重新发明轮子。

【问题讨论】:

  • 我已经完成了一些非常接近的事情,方法是拥有一个 pom 文件,该文件指定具有您想要作为依赖项运行的类的项目。然后我运行“mvn package”,然后运行“mvn exec:java”来运行该类。对任意类执行此操作需要动态修改该 pom 文件。
  • @Chris 正如其他几个人指出的那样,这是一个好主意。我只是拼凑了一个快速的 pom 作为概念证明,你甚至不需要运行“mvn package”。我将虚拟项目的打包设置为“pom”,然后直接运行“mvn exec:java”。
  • 这就是堆栈溢出真正开始起作用的地方:感谢您的帮助!
  • jcabi-aether 应该能够使用它们的 Maven 坐标帮助下载工件

标签: java maven deployment aether


【解决方案1】:

也许这很明显,但为什么 exec 插件不起作用? http://mojo.codehaus.org/exec-maven-plugin/

mvn exec:java -Dexec.mainClass=com.project.App

如果 com.project.App 是另一个 jar 的一部分,您可以像往常一样将其作为依赖项包含在内。

【讨论】:

  • 我不知道为什么我没有想到这一点。我已经使用 exec 插件从当前项目中运行类,但我什至没有想到只是将我的目标工件添加为单个依赖项。我很高兴在编写自己的实现之前问了这个问题。谢谢!
  • 我刚刚意识到这个解决方案的缺点之一是 STDOUT 会被所有 Maven 输出弄得一团糟。不是一个大问题,但它确实使它对我的特定应用程序不太理想。
  • 是的...但是整个方法(使用 Maven 作为安装程序兼执行程序来执行一次性命令)笨拙且效率低下:所有插件和依赖项的下载。还有很多更好的方法;例如JNLP 或下载可执行的 uber-JAR 文件。
  • 一个人的低效下载是另一个人的高效开发工作。对于我们,一个研究实验室,我们不期望有很多用户并且资源有限。让 maven 做双重职责让事情变得简单。
【解决方案2】:

使用 Maven 运行应用程序非常简单。我想知道这是你正在看的东西还是我的问题错了?

mvn exec:java -Dexec.mainClass="com.test.foo.Main" -Dexec.args="arg1 arg2..." 

【讨论】:

    【解决方案3】:

    我刚刚将Installation plugin 推送到Maven Central。它允许从存储库安装和执行工件,并且不需要项目。

    它与 yum、apt 或 gem 等包管理器非常相似:

    mvn installation:install -Dartifact=groupId:artifactId

    这将为路径上可用的类创建一个快捷方式。

    【讨论】:

    • 看起来不错。实际上,我们最终在 mvn 之外编写了自己的小实用程序来做一些非常相似的事情。即使插件没有做任何工作,mvn 命令也需要很长时间才能运行,我们一起放弃了它,只是编写了一些 bash 脚本来进行下载和设置类路径。它不是完全通用的,但对我们来说效果很好。
    • 嗯,安装总是需要时间 :-) 安装该工具时,它会创建快捷方式并在 Maven 之外的系统上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多