java-9 - 是否可以使用 jvm 模式使用 prunsrv 启动 Java 运行时镜像?

标签 java-9 java-module jlink apache-commons-daemon prunsrv

背景:从 Java 9 开始,可以创建 custom runtime images (JRE+程序) 使用 jlink .

可以使用 prunsrv.exe(Apache Commons Daemon 的一部分)将 Java 程序安装为 Windows 服务。

prunsrv 可以在三种启动模式下使用:java、jvm 和 exe。

我设法使用 exe 模式启动自定义运行时镜像,并使用 jvm 模式启动传统 Java 程序(类路径 + 普通 JDK),但我无法使用 jvm 模式(不会启动新进程)与图像.

prunsrv 有一个“JvmOptions9”参数,这可能暗示可能支持这种情况,但我不确定。

最佳答案

我一开始也有同样的问题,但设法解决了。虽然这是一个老问题,但这是我在搜索时发现的第一个问题,所以我会为其他人提供我的答案。

我可以毫无问题地安装该服务,但是当我尝试在 jvm 模式下启动它时,它会失败并提示“%1 不是有效的 Win32 应用程序”。这里的关键字是Win32。

prunsrv 可执行文件有两种版本:一种在安装目录中,另一种在 amd64 子目录中。安装目录下的版本只支持32位,amd64的版本是64位的。 prunsrv 和 Java 版本必须都是 32 位或 64 位;我试图从 32 位 prunsrv 服务启动 64 位 Java VM。

换句话说,确保使用了目标 Java VM 的正确版本的 prunsrv。有了它,我可以毫无问题地运行带有精简运行时镜像的模块化 Java 9(或实际上是 12)应用程序。

关于java-9 - 是否可以使用 jvm 模式使用 prunsrv 启动 Java 运行时镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923216/

相关文章:

java - Java 9 如何避免拆分包

java - 如何在 Java 9 中枚举非系统模块

java - maven-jmod-plugin :3. 0.0-alpha-1 给出错误创建失败。非法参数异常

java - 如何在 Java 9 中将新的 HTTP 客户端响应主体转换为字符串?

java - 使用 java 自动模块 cdi.api 与 maven 和 java 9+

java - 使用 deps 从旧 JAR 创建模块化 JAR

java - J/Link 中 "if"语句的正确语法

Java protected 变量在枚举类型中意味着什么?

java - Intellij 错误 :(3, 4) java:-source 8 中不支持模块(使用 -source 9 或更高版本来启用模块)

java - 如何从 ModuleReference 获取 Module 对象