我编写了一个提供多个 MBean 的 Java 17 应用程序。如果我通过
java -jar myjar.jar
使用标准 Java 17 SDK 启动 jar,应用程序就会启动,我可以从 JConsole 连接到它。
然后我使用 jlink 创建了一个自定义运行时映像。
应用程序本身可以在此图像上正常运行。它获取 MBeanServer 并成功注册我的 MBean。
当我启动 Jconsole 时,我可以选择正在运行的应用程序(作为“本地进程”),但无法创建与该进程的连接。
我尝试添加一些附加模块(如 jdk.management、java.management,...),但没有成功。似乎至少缺少一个模块,因为在我的客户运行时映像中,例如DLL management_ext.dll 丢失。
知道哪些模块是必要的吗?
尝试使用
jdeps
检查构建中所需的所有模块。
列出来自
.jar
的所有模块的示例
jdeps --ignore-missing-deps --print-module-deps --multi-release 17 your-jar.jar
示例
jlink
jlink \
--module-path /path-with-all-jdk-modules \
--add-modules $(jdeps --ignore-missing-deps --print-module-deps --multi-release 17 your-jar.jar ) \
--output /path-output-jre-custom \
--strip-debug \
--no-header-files \
--no-man-pages \
--compress 2
我必须添加
jdk.management.agent
。添加了 management.dll
和 management_agent.dll
。 management_ext.dll
好像没有必要。