繁体   English   中英

oshi-core 中 SystemInfo class 的 NoClassDefFoundError

[英]NoClassDefFoundError for SystemInfo class in oshi-core

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

依赖结构

<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>

但是,我看到了这个错误:

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-GitHub 的以下内容。 我的意思是在 oshi-core 中有依赖项,那我为什么要再次添加 jna 依赖项?

如果您使用包含 JNA 作为依赖项的父项(例如 Spring Boot),请覆盖 jna.version 属性或等效属性

我在 oshi-core 依赖项中使用最新的 jna 和 jna-platform 版本。

OSHI 网站上关于 JNA NoClassDefFoundError的文档与这种情况无关,因为未找到 OSHI 本身。 问题出在包含堆栈跟踪第一行的 package 中:

at io.cloudslang.worker.monitor.CpuPerProcess.measure(CpuPerProcess.java:34)

从这个 package 名称看来,您正在使用CloudSlang 分数,但是,GitHub 上的最新版本不包括 class CpuPerProcess 您可能正在使用该存储库的分叉版本。

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

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

<properties>
    <jna.version>5.6.0</jna.version>
</properties>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM