我编写了一个Java 17应用程序,它提供了几个mbean。如果我用标准Java 17 SDK通过java -jar myjar.jar
启动jar,应用程序启动,我可以从JConsole连接到它。
然后我用jlink创建了一个自定义运行时映像。
应用程序本身在此图像下运行良好。它获得MBeanServer并成功注册我的MBean。
当我启动Jconsole时,我可以选择正在运行的应用程序(作为"本地进程"),但是无法创建到该进程的连接。
我已经尝试添加一些额外的模块(如jdk)。管理、java。管理,…)但没有成功。似乎至少有一个模块缺失,因为在我的客户运行时映像中,例如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
似乎没有必要。