[英]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.