【发布时间】:2014-09-13 14:00:57
【问题描述】:
假设我们有一个 Java 应用程序,而不是一个库,它可以通过 Maven 中心获得。比如一个这样的项目是jol,它有对应的CLI接口in Maven central。
据我所知,与库的主要区别在于,相应的 JAR 文件包含一个类,该类具有适当的 main() 方法,并且可以选择在 JAR 清单中包含相关的 Main-Class: 标头。如果这样的工件被用作项目的依赖项,Maven 会很高兴地将 JAR 文件及其依赖项下载到本地存储库,就像它对任何其他工件一样。
是否可以直接使用 Maven 来执行这样的应用程序,而无需设置 Maven 项目?
exec:java plugin 通过设置 JVM 类路径使依赖项可用,非常适合本地项目。用户不必担心 JAR 或 .class 文件位置等。不幸的是,据我所知,它还需要一个封闭的 Maven 项目,因此不能在任意命令行提示符下使用它。
【问题讨论】:
-
我可能只是用一个 shell 脚本来包装像 stackoverflow.com/questions/1776496/… 这样的东西,然后执行下载的工件。或者编写一个简单的程序来与 Maven 存储库对话,并可以获取一个工件并完全跳过 Maven。
-
@DaveNewton:获取 JAR 文件并不是唯一的问题。例如,
exec:java将设置 JVM 类路径,以便依赖关系可用。 那就是我所追求的…… -
您可以通过编程方式获取 jar 的依赖项并执行相同的操作。无论如何,如果您安装了 Maven,那么使用您的顶级依赖项创建一个临时项目就是一个非常小的 POM 文件。为什么不能即时创建项目?有什么问题?
-
@DaveNewton:我想主要问题是我不喜欢重新发明轮子,如果已经存在解决方案的话。此外,使用脚本正确并不是那么简单(或者说便携)...
标签: java maven executable-jar execution