日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...

發(fā)布時(shí)間:2023/12/3 java 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

此錯(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 MyApplication

2.如果您的程序使用的是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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。