Getting NoClassDefFoundError-> com / sun / jna / platform / win32 / Psapi with Eclipse

问题描述 投票:0回答:2

我的程序依靠以下代码来获取可用的系统内存:

import oshi.SystemInfo;
import oshi.hardware.HardwareAbstractionLayer;


SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();

// Next line throws exception: NoClassDefFoundError -> com/sun/jna/platform/win32/Psapi
long availableBytes = hal.getMemory().getAvailable();
double availableMegabytes = ((double) availableBytes) / 1048576;
double availableGigabytes = ((double) availableMegabytes)/1024;

更新:oshi-core中的每个项目中删除每次出现的Workspace(以消除暂时性冲突依赖性的可能性-仅保留4.2.1)。现在我得到的错误是-> java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/VersionHelpers

pom.xml中,我添加了oshi-core依赖性-我已经尝试了从版本3.4.0到最新版本4.2.1的几乎每个版本,它们都导致相同的错误。

我意识到oshi-core依赖于jnajna-platform。在Dependency Hierarchy中,我看到两者都已解析(编译)为版本5.5.0

导致此错误的原因以及如何解决?

谢谢!

P.S

我见过其他一些具有类似错误的线程,但是找不到任何具有此确切问题的线程(缺少com/sun/jna/platform/win32/Psapi

java eclipse noclassdeffounderror jna oshi
2个回答
0
投票

似乎oshi-core依赖于Sun / Oracle JVM的内部未记录的功能,而您正在运行的其他和/或更新的JVM不再具有该[[未记录的功能。这就是使用未记录的功能的风险。

获取支持您正在使用的JVM版本的oshi-core的较新/其他版本,或切换为使用oshi-core支持的JVM。

0
投票
尽管您在评论中指出您认为JNA的最新版本已解决,但错误表明您的项目没有最新版本的jna-platform(或可能在项目上链接了多个版本)类路径)。 NoClassDefFoundError几乎总是这种情况,并且在朝正确的方向进行故障排除时,证据表明您的项目中某个地方存在旧的jna-platform版本。

com.sun.jna.platform.win32.VersionHelpers类在com.sun.jna.platform.win32.VersionHelpers版本5.3.0及更高版本中。给您错误的方法调用所需的jna-platform方法在GetPerformanceInfo()类中,在com.sun.jna.platform.win32.Psapi版本4.3.0及更高版本中。如果您的类加载器找不到这些类,则说明您没有正确的jar链接到您的项目-或者您在正确的jar旁边链接了不正确的jar。

com.sun.jna.platform.win32.Psapi ...首先,它执行您在POM中列出的所有依赖项(按顺序),然​​后执行那些项目的可传递依赖项(按顺序),依此类推。确保可以使用以下任一(或两者)实施最新版本的JNA:

    在依赖关系列表的前面指定jna-platform依赖关系在您的POM中,特别是在任何依赖于JNA的早期版本。
  • 明确指定Maven resolves dependencies by level和顶级POM中的oshi-core版本(5.5.0)。
  • 此外,在Eclipse中,请确保进入jna菜单,以确保POM更改后您的依赖项保持同步。

[您的本地存储库可能没有下载更新的jar,在这种情况下,您可以清除它(或仅从jna-platform删除任何JNA工件或所有东西,然后让它重建。]

还要检查Eclipse中的类路径。如果您在设置POM以从Maven获取依赖之前手动添加了依赖(例如,添加到JNA),则可以使用它们。

如果上述提示不能解决您的问题,请在Update Maven Project文件中发布依赖项部分的内容,以便我们提供其他建议。

© www.soinside.com 2019 - 2024. All rights reserved.