运行 来自批处理文件的可执行 jar,但打开控制台以便用户可以看到输出。不使用 "java -jar"

Run executable jar from batch file but with console open so that user can see the output. Not using "java -jar"

我已经创建了一个可执行的 jar 文件,双击它就可以正常工作。但是有这个需要在执行结束时显示输出。我使用带有 start xxx.jar 命令的批处理文件,它执行 jar 但 没有控制台和输出 。然后我使用 java -jar XXX.jar 它完成了工作,但这里的问题是用户可能没有安装 jre。 有什么建议吗?

start 将要求 windows 使用注册表中配置的默认启动器启动文件。

这自然意味着没有任何反应/发生错误,除非您遇到奇怪的情况,即最终用户实际上安装了您不应该依赖的 JVM,并且您完全不知道谁的 JVM,或者它是什么版本,或者它是否得到了适当的维护。它还将使用不显示控制台的 javaw.exe,您绝对无法更改它。

我认为你被误导了——你想要一个有效的解决方案,如果:

  • 用户自己安装了 JDK 或(过时的)JRE,并以双击 jar 文件的方式安装,但是...
  • 没有更新 PATH 变量或以其他方式确保命令行上的 java 有效

我认为这根本没有涵盖很多安装。绝大多数部署将是 'the user did not install any java',在这种情况下,startjava -jar 都不是解决方案,或者他们在路径上安装了 java,在这种情况下,批处理文件中的 java -jar 工作正常。

好的,那么您如何部署 java 应用程序

在现代?使用 jlink 创建一个 cut-down 可执行文件,然后你编写自己的安装程序来安装你信任的 JVM(jlink 制作的那个,它更小,因为你不需要的应用程序的所有位都是'包含在其中),从而导致用户能够 运行 您的应用程序而无需 'find a java installation and install it'。不幸的是,这比它可能更难,并且需要您使用模块系统。

听起来工作量太大,旧方法有什么问题?

JRE(一个 java 虚拟机,可以 运行 java 应用程序,但不包括任何开发工具)的概念 dead.没有更多的 JRE; java8,现在已经 7 岁了,是最后一次出现这种情况,而 oracle 发布的 JRE 几乎已经过时了:他们已经停止支持它,或者现在很快就会实现。这意味着 您要求您的用户安装将不再接收安全更新的软件。这就是为什么这样做是个糟糕的主意。很抱歉成为坏消息的传递者。