簡體   English   中英

"即使在類路徑中的 Jar 中也找不到類"

[英]Class not found even when in Jar in the classpath

我正在嘗試部署一個使用 Jackson、JUnit 和 Commons-IO 的應用程序。 我的應用程序的類路徑中有以下罐子:

commons-io-2.4.jar
jackson-databind-2.7.0.jar
jackson-annotations-2.7.0.jar
log4j-api-2.4.1.jar
wsdiscovery-0.2.jar
jackson-core-2.7.0.jar
log4j-core-2.4.1.jar

這個應用程序在我的開發環境中工作,我已經使用主應用程序 jar 部署了上述所有 jar。 我可以毫無問題地運行該應用程序,但每次嘗試使用它時都會出現以下故障:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
    at com.oncam.hware.app.OnvifApp.formatOutput(OnvifApp.java:356)
    at com.oncam.hware.app.OnvifApp.dispatchCommand(OnvifApp.java:271)
    at com.oncam.hware.app.OnvifApp.loopSocket(OnvifApp.java:130)
    at com.oncam.hware.app.OnvifApp.useSocket(OnvifApp.java:216)
    at com.oncam.hware.app.OnvifApp.main(OnvifApp.java:473)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 5 more

ObjectMapper 類位於 jackson-databind-2.7.0.jar 文件中。 此外,我在訪問其他 jar 文件(包括 JUnit jars!)中的類時也沒有問題。 出於某種原因,就好像類加載器正在加載除 jackson-databind-2.7.0.jar 之外的每個 Jar。

有誰知道是什么原因造成的,我該如何解決?

有人請指教...

我弄清楚出了什么問題。

事實證明,當您將代碼導出到JAR文件時,我正在使用的環境(Eclipse!)無法正確更新清單文件。 沒有正確的清單條目,應用程序將無法“找到”相關的jar文件。

在我看來,這是Eclipse專家們的一個嚴重疏忽-尤其是當您有一個依賴大量jar文件的應用程序時。 為了使我的應用程序運行,我有以下選擇:

  1. 創建一個運行jvm並具有指向每個需要的jar文件的參數列表的腳本,或者:

2:將每個所需的jar文件手動輸入到清單文件中

據我所知,沒有辦法自動更新清單文件。 這是嚴重的PITA(痛苦中的A **)...

無論如何,對於使這個問題困擾人們感到抱歉。 希望發布此答案將有助於其他人避免類似的問題...

我的項目中也發生了完全相同的異常,但我使用的是 sts。 但異常顯示主要 Spring Boot 應用程序類

線程“主”java.lang.NoClassDefFoundError 中的異常:org\/springframework\/core\/metrics\/Applicationstartup

在 org.spring framework.boot.SpringApplication。 (SpringApplication.java: 227) 在 org.springframework.boot.SpringApplication。 (SpringApplication.java: 240) 在 org.springframework.boot.SpringApplication.run (SpringApplication.java:1301)

在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) 在 com.testDemoproject.covidDemoassignmentsts.CovidDemoAssignmentStsApplication.main(CovidDemoAssignment StsAp

引起:java.lang.ClassNotFoundException:org.springframework.core.metrics。 ApplicationStartup 在 java.base\/jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:606)

在 java.base\/jdk.internal.loader.ClassLoaders $AppClassLoader.loadClass (ClassLoaders.java:168)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM