首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oshi中用于NoClassDefFoundError的SystemInfo类

oshi中用于NoClassDefFoundError的SystemInfo类
EN

Stack Overflow用户
提问于 2020-10-08 08:59:49
回答 1查看 405关注 0票数 1

我使用Maven将oshi-core作为依赖项包含在我的项目中:

依赖结构

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>com.github.oshi</groupId>
        <artifactId>oshi-core</artifactId>
       <version>5.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>score-worker-monitor-api</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
    </dependency>
</dependencies>

然而,我看到了这个错误:

代码语言:javascript
复制
2020-10-08 11:15:49,688 [scoreWorkerScheduler-5] (TaskUtils.java:95) ERROR - Unexpected error occurred in scheduled task.
java.lang.NoClassDefFoundError: oshi/SystemInfo
    at io.cloudslang.worker.monitor.CpuPerProcess.measure(CpuPerProcess.java:34)
    at io.cloudslang.worker.monitor.PerfMetricCollectorImpl.collectMetric(PerfMetricCollectorImpl.java:53)
    at io.cloudslang.worker.monitor.service.WorkerMetricCollectorServiceImpl.collectPerfMetrics(WorkerMetricCollectorServiceImpl.java:42)
    at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748) 

我不明白OSHI的下面这句话。我的意思是在oshi中有依赖性,那么为什么我应该再次添加jna依赖项呢?

如果您正在使用包含JNA作为依赖项的父(例如Spring ),则重写jna.version属性或等效

我正在使用一个最新的jna和jna平台版本,在oshi-核心依赖。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 15:10:05

OSHI网站上有关JNA NoClassDefFoundError的文档与本案无关,因为找不到的是OSHI本身。问题在包含堆栈跟踪的第一行的包中:

代码语言:javascript
复制
at io.cloudslang.worker.monitor.CpuPerProcess.measure(CpuPerProcess.java:34)

从您使用的CloudSlang评分包名中可以看出,GitHub上的最新版本不包括类CpuPerProcess。您可能正在使用该存储库的分叉版本。

在这种情况下,您需要确保oshi-core依赖项包含在分叉版本的CloudSlang的pom.xml中。

虽然它与您所看到的错误并不特别相关,但回答有关JNA版本的问题是,JNA工件作为传递依赖项包含在OSHI中。如果您使用Spring父级(而不仅仅是另一个依赖项),那么优先使用JNA的Spring版本,您必须在pom.xml中定义这一点,以确保Spring包含正确的版本:

代码语言:javascript
复制
<properties>
    <jna.version>5.6.0</jna.version>
</properties>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64259131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档