【发布时间】:2018-03-20 13:31:58
【问题描述】:
我在 maven 的帮助下开发了一个 java 控制台应用程序,用于我的依赖管理。 该应用程序是一个纯控制台应用程序,这意味着用户必须通过命令行调用它,并且必须为其提供参数。 我需要将finiheD jar(由maven-assembly-plugin 生成的依赖项)与一个完整的JRE 捆绑在一起,因为该应用程序必须能够在没有预先安装java 的机器上工作。
我尝试在完成的 jar 上使用 java packager -deploy 命令,但它并没有真正起作用: https://docs.oracle.com/javase/9/tools/javapackager.htm#JSWOR719
C:\jdk-9.0.4\bin>javapackager.exe -deploy -srcdir C:\folderwithjarinside -outdir C:\outdir -name Toolname -native -appclass [..].core.Main
之后我得到一个包含 jar 包、完整的 jre 和一个 exe 来启动整个过程:
当我现在启动 exe 时,什么都没有发生,当我再次从命令行启动它时,什么也没有发生,我什至没有得到应该发生的控制台输出。 当我单独启动 jar 时,即使我没有提供参数,我也会得到控制台输出,并且它会导致它崩溃。
如何使用 JRE 打包我的 java 控制台应用程序,并且仍然能够在命令行应用程序提供参数并查看控制台输出时启动它?
提前致谢
【问题讨论】:
-
为什么要创建 Java 应用程序的 exe?
-
@Stultuske 我不需要 exe,但是将我的应用程序捆绑到 JRE 的唯一选择是在 windows 上使用 exe 来作为入口点
-
@VictorGubin 谢谢,我会调查的
-
由于您已经在使用 Maven,您还可以查看 Shade Plugin 或类似插件。此类插件还将帮助您打包整个应用程序,并且您还可以只使用命令行来运行它,例如
java -jar <your-jar-file>.jar。此外,如果您还需要包含 jre/jdk,则可以使用 assemble-plugin 将此 jar 文件捆绑在一个 zip 中。