如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...
此錯(cuò)誤表示您的代碼或您在應(yīng)用程序中使用的任何外部庫(kù)都在使用SLF4J庫(kù) (一個(gè)開放源代碼日志記錄庫(kù)),但無法找到所需的JAR文件,例如slf4j-api-1.7.2.jar因此它是在線程“ main” java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 。 如果查看錯(cuò)誤,將會(huì)看到它無法找到類org/slf4j/LoggerFactory或rg.slf4j.LoggerFactory 。 軟件包名稱指示它是SLF4j的一部分,因此您需要在應(yīng)用程序的類路徑中使用SLF4j JAR文件,例如slf4j-api-1.7.2.jar。 因此,繼續(xù)從SLFj網(wǎng)站或Maven Central存儲(chǔ)庫(kù)下載JAR文件,然后重新啟動(dòng)應(yīng)用程序。
順便說一句,SLF4j并不是真正的日志API,但它提供了對(duì)其他日志庫(kù)(例如Log4j ,java.util.logging或LogBak)的抽象。 它與commons-logging庫(kù)類似,但是由于設(shè)計(jì)更好,它在復(fù)雜的環(huán)境中不會(huì)混亂。
通過使用SLF4j,您可以切換到任何日志記錄庫(kù),而無需更改應(yīng)用程序中的任何代碼行,例如,從java.util.logging or LogBack切換到Log4j。
因此,除了SLF4j二進(jìn)制文件外,如果使用LogBack庫(kù),您還需要適當(dāng)?shù)娜罩居涗浂M(jìn)制文件,例如log4j-1.2.16.jar或logback-1.2.3.jar 。 這些是SLF4j將調(diào)用它們進(jìn)行實(shí)際工作的庫(kù)。
有時(shí),當(dāng)您的代碼不是真正使用SLF4j,而是使用內(nèi)部使用它的工具或庫(kù)時(shí),會(huì)出現(xiàn)此錯(cuò)誤。
例如,我使用的是log4jdbc.jar ,它是一個(gè)在運(yùn)行JDBC代碼時(shí)記錄SQL語句及其計(jì)時(shí)的工具 ,它給了我這個(gè)錯(cuò)誤:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at net.sf.log4jdbc.Slf4jSpyLogDelegator.<init>(Slf4jSpyLogDelegator.java:45) at net.sf.log4jdbc.SpyLogFactory.<clinit>(SpyLogFactory.java:37) at net.sf.log4jdbc.DriverSpy.<clinit>(DriverSpy.java:106) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at Testing.main(Testing.java:15) Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 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) ... 6 more 由于我的程序很簡(jiǎn)單,而且我實(shí)際上并沒有使用任何Logging API,所以我對(duì)出現(xiàn)此錯(cuò)誤的地方感到驚訝,但是,快速查看一下堆棧跟蹤顯示它
net.sf.log4jdbc.DriverSpy類,它使用SLF4j進(jìn)行日志記錄 。
稍后,當(dāng)我閱讀log4jdbc的文檔時(shí),我意識(shí)到我們需要SLF4J和Log4J JAR文件才能使其正常工作。 由于我在Eclipse中運(yùn)行測(cè)試程序,因此對(duì)我來說很容易,因此我將slf4j-api-1.7.2.jar和log4j-1.2.16.jar放在了項(xiàng)目目錄中。 由于它包含在類路徑中,因此很容易被拾取。
順便說一句,對(duì)于許多Java程序員來說, 類路徑問題不容易解決,因?yàn)樗麄儾恢缹⑦@個(gè)JAR文件確切地放在哪里來解決他們的問題。 由于每種應(yīng)用程序的設(shè)置都不相同,因此我將嘗試介紹一些方案來解決此錯(cuò)誤。
1.如果您正在使用批處理腳本或Shell腳本運(yùn)行Java程序,請(qǐng)查找-cp或-classpath選項(xiàng),并查看它在哪里選擇JAR文件。 您可以將slf4j-api-1.7.2.jar和log4j-1.2.16.jar放在這些目錄中。
如果您的程序在Linux服務(wù)器上運(yùn)行,則只需執(zhí)行ps -ef | grep java并查看Java程序的JVM參數(shù)以查找類路徑中的目錄。 如果您有權(quán)訪問腳本,則還可以將新目錄添加到類路徑。
$ ps -ef | grep java/opt/jre/v1.7.0_80-64bit/bin/java -Xmx8192M -Xms8192M -classpath /app/myapp.jar:/app/jackson.jar MyApplication2.如果您的程序使用的是CLASSPATH環(huán)境變量,則只需回顯$CLASSPATH并將slf4j-API-1.7.2.jar和log4j-1.2.16.jar文件放入CLASSPATH中已經(jīng)存在的目錄中,或者只需將新目錄添加到CLASSPATH中即可。 請(qǐng)參閱本文以了解如何在CLASSPATH環(huán)境變量中進(jìn)行更改 。
3.如果使用的是Eclipse,則只需將slf4j-API-1.7.2.jar和log4j-1.2.16.jar放入您的項(xiàng)目目錄中。 默認(rèn)情況下,它在類路徑中,因此您的應(yīng)用程序?qū)⑻崛AR。
您可以從相應(yīng)的網(wǎng)站(例如https://www.slf4j.org和https://logging.apache.org/log4j/1.2/download)下載slf4j-api-1.7.2.jar和log4j-1.2.16.jar。 .html或僅從Maven Central存儲(chǔ)庫(kù)下載它們。
如果您使用Maven來構(gòu)建項(xiàng)目和管理依賴關(guān)系,則還可以添加以下Maven依賴關(guān)系以將SLF4J和Log4j JAR文件下載到您的項(xiàng)目中:
<!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.2</version></dependency><!-- LOG4J --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.2.16</version></dependency>添加這些依賴項(xiàng)之后,請(qǐng)確保從Maven進(jìn)行了干凈的構(gòu)建,以實(shí)際從Maven的遠(yuǎn)程存儲(chǔ)庫(kù)下載這些依賴項(xiàng)。
這就是如何解決線程“ main”中的異常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory錯(cuò)誤 。 您需要做的就是將slf4j-API-1.7.2.jar和log4j-1.2.16.jar文件添加到類路徑中。
根據(jù)具體情況,版本可能有所不同,但是您必須添加兼容版本的SLF4J和所使用的日志記錄庫(kù)。 例如,如果您的應(yīng)用程序使用LogBack,則需要添加logback.jar文件的相關(guān)版本。
如果使用Maven,還可以通過在pom.xml中添加相關(guān)的依賴項(xiàng)來下載這些JAR文件,否則,您可以從Maven Central或直接從SLF4j和Log4j網(wǎng)站下載JAR文件并添加到應(yīng)用程序的類路徑中。
如果您發(fā)現(xiàn)在將SLF4J和LOG4j JAR文件添加到類路徑中時(shí)遇到任何麻煩,也可以在注釋部分告訴我們,我們會(huì)盡力幫助您。
感謝您閱讀本教程,如果您喜歡本教程,請(qǐng)與您的朋友和同事分享。 如果您有任何問題或建議,請(qǐng)發(fā)表評(píng)論。
翻譯自: https://www.javacodegeeks.com/2018/02/fix-exception-thread-main-java-lang-noclassdeffounderror-org-slf4j-loggerfactory-java.html
總結(jié)
以上是生活随笔為你收集整理的如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 解析gson_使用Java和G
- 下一篇: ejb 示例 2018_Java EE