【问题标题】:Java (Maven) Console Application. How to bundle it with an JRE?Java (Maven) 控制台应用程序。如何将它与 JRE 捆绑在一起?
【发布时间】: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 中。

标签: java maven bundle


【解决方案1】:

有多种工具可用于将 JRE 与您的应用程序打包在一起:

  • install4j
    如果您需要特定的 JRE,您将需要访问目标平台,在其中安装 JRE,然后调用工具对其进行打包。我建议只执行一次,将生成的 JRE 包作为非 Maven 工件推送到您的存储库,然后使用 maven-download-plugin 将其拉入您的安装程序构建。
    我可以证明 EJ Technologies 有很大的支持,从问题到回答的典型持续时间是 24-48 小时,这取决于您有多少后续问题,我还没有看到他们的回答不完整、错误或误导。
  • launch4j(见https://stackoverflow.com/a/7582064/6944068
    我只知道它存在,我从未尝试过。
  • JDK actually comes with a way to do that since 1.7
    有传言说它的设计很糟糕而且使用起来令人沮丧,但我真的不知道。

我很确定,launch4j 和 JDK 都不支持安装程序的跨平台构建,即在您的部署工具链中,您需要一台机器,其中包含您希望为其安装安装程序的每个平台的每个目标操作系统。
install4j 在这方面并不理想,但至少您只需要一次其他平台的机器来创建 JRE 包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2011-10-27
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2013-03-16
    • 2011-01-07
    相关资源
    最近更新 更多