Chu*_*ras 6 java wildfly wildfly-10
我有这段代码来读取物理内存:
com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
long physicalMemorySize =os.getTotalPhysicalMemorySize();
System.out.println("physicalMemorySize="+physicalMemorySize);
Run Code Online (Sandbox Code Playgroud)
我有 JDK 1.8.0_121(64 位,在 Windows 上)
此代码编译没有问题,我可以在控制台应用程序中运行它,它运行正常。
但是当我将此代码放入 WildFly 10 服务器上的某些 Bean 或 JSP 页面时,它显示错误:
Caused by: java.lang.ClassNotFoundException: com.sun.management.OperatingSystemMXBean
Run Code Online (Sandbox Code Playgroud)
WildFly 使用完全相同的 JDK,因此它应该像控制台应用程序看到它一样看到这个类。
该类已存在jdk1.8.0_121\jre\lib\rt.jar,所以我不明白为什么 WildFly 会抱怨 ClassNotFoundException。
有什么问题?如何让 WildFly 运行该代码?
com.sun.management这可以通过在您的 中使用类似的内容显式包含类来解决jboss-deployment-structure.xml:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<system>
<paths>
<path name="com/sun/management"/>
</paths>
</system>
</dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
这是因为这些包被 jboss-modules 过滤掉了,如果你查看“modules/system/layers/base/sun/jdk/main/module.xml”,你会发现 com.sun.management 不存在。您需要创建一个模块来获取这些类或编辑该模块。