รับ java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory ข้อยกเว้น


188

ฉันกำลังรันโปรแกรมฉีดพึ่งพาของสปริงและรับข้อยกเว้นนี้ ฉันได้รวมไฟล์ common-logging1.1.1.jar และ spring.jar แล้ว คุณช่วยออกไปได้ไหม

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:119)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:55)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
    at com.client.StoryReader.main(StoryReader.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 6 more

2
ก่อนอื่นให้ตรวจสอบอีกครั้งว่า classpath ของคุณถูกต้องแน่นอน ขั้นที่สองลองเปิดขวดและตรวจสอบว่ามีคลาส org.apache.commons.logging.LogFactory จริง สุดท้ายให้ลองดีบั๊กโดยการตั้งจุดพักในตัวโหลดคลาส
Kolibri

2
คำตอบทั้งหมดที่แนะนำด้านล่างcommons-loggingนี้เป็นขั้นตอนย้อนหลัง ใช้jcl-over-slf4jแทน
opyate

ใน Android เพิ่ม testCompile 'การเข้าสู่ระบบทั่วไป: การเข้าสู่ระบบทั่วไป: 1.1.1' ไปยัง app.gradle
Roger Garzon Nieto

คำตอบ:


118

ฉันยังต้องเผชิญกับปัญหาเดียวกันเพื่อแก้ไขดาวน์โหลดไฟล์ jar จาก url ด้านล่าง

http://commons.apache.org/logging/download_logging.cgi

และคัดลอกไปยังโฟลเดอร์ lib ของคุณจะแก้ไขปัญหาของคุณ


2
สิ่งนี้ใช้ไม่ได้สำหรับฉันแม้หลังจากเพิ่มขวดทั่วไปที่กล่าวถึงข้างต้นใน classpath แล้ว
Deen John

2
ไม่ใช่สำหรับฉัน libs เหล่านี้เสีย มันช่างน่ากลัวเหลือเกิน
Wesos de Queso

114

หากคุณใช้ Maven ในการจัดการการพึ่งพาให้เพิ่มบรรทัดต่อไปนี้ใน pom.xml ของคุณ:

<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>


19

commons-logging-1.1.1.jar หรือ jcl-over-slf4j-1.7.6.jar al

หากคุณใช้ Maven ให้ใช้รหัสด้านล่าง

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>

2
การรวม "jcl-over-slf4j" เป็นทางออกเดียวที่เหมาะกับฉัน ฉันมีการบันทึกการใช้งานทั่วไปในการอ้างอิงของฉันแล้ว
Italo Borssatto

ฉันกำลังใช้สปริงบูตเวอร์ชั่น 2.0.1 ปล่อยด้วย maven นี่เป็นทางออกเดียวที่เหมาะกับฉันเช่นกัน
Carlos Nantes

18

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยเพียงเพิ่มcommons-logging.jarเส้นทางของคลาส



6

ฉันได้รวม common-logging1.1.1.jar และ ...

คุณแน่ใจหรือว่าคุณสะกดชื่อไฟล์ JAR อย่างถูกต้อง? ฉันคิดว่ามันน่าจะเป็นcommons-logging-1.1.1.jar(หมายเหตุพิเศษ-ในชื่อ) ตรวจสอบว่าชื่อไดเรกทอรีถูกต้องหรือไม่

NoClassDefFoundError เสมอหมายความว่าไม่สามารถหาคลาสได้ดังนั้นโอกาสที่คลาสของคุณจะไม่ถูกต้อง


2
NoClassDefFoundErrorยังสามารถเกิดจากกรณีมุมอื่น ๆ เช่นเมื่อชั้น initializers ล้มเหลวในสถานการณ์ที่คลุมเครือ
skaffman

นอกจากนี้หากเขาได้รับ NoClassDefFoundError เนื่องจากการสร้างอินสแตนซ์ของคลาสล้มเหลวเขาควรได้รับข้อยกเว้น ExceptionInInitializerError ก่อน
Kolibri

และอย่าลืม "s"commons-logging-1.1.1.jar
Glenn Lawrence

@GlennLawrence ขอบคุณคงชื่อแล้ว
Jesper

6

การตั้งค่าขอบเขตการคอมไพล์ทำได้สำหรับฉัน

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>

1
แก้ไขสถานการณ์ของฉัน เมื่อเรียกใช้กรณีทดสอบ Mockito ฉันได้รับข้อผิดพลาดนี้และแก้ไขการพึ่งพาใน pom.xml
venugopal

4

ลองทำความสะอาดไดเรกทอรีเป้าหมาย / การปรับใช้ทั้งหมดให้กับแอพเพื่อกำจัด jars library เก่า ๆ สร้างบิลด์ใหม่และตรวจสอบว่า commons-logging.jar กำลังถูกวางในโฟลเดอร์ lib ที่ถูกต้อง อาจไม่รวมเมื่อคุณสร้างห้องสมุดสำหรับแอปพลิเคชัน


4

แก้ไขปัญหาโดยเพิ่ม commons-logging.jar

ไฟล์ Imp คือ

antlr-runtime-3.0.1

org.springframework.aop-3.1.0.M2

org.springframework.asm-3.1.0.M2

org.springframework.aspects-3.1.0.M2

org.springframework.beans-3.1.0.M2

org.springframework.context.support-3.1.0.M2

org.springframework.context-3.1.0.M2

org.springframework.core-3.1.0.M2

org.springframework.expression-3.1.0.M2

commons-logging-1.1.1

3

สองตัวเลือก (อย่างน้อย):

  1. เพิ่ม jar การบันทึกข้อมูลทั่วไปลงในไฟล์ของคุณโดยคัดลอกลงในโฟลเดอร์ในเครื่อง

หมายเหตุ: การเชื่อมโยง jar สามารถทำให้เกิดปัญหากับเซิร์ฟเวอร์และอาจเป็นสาเหตุว่าทำไมมันถูกเพิ่มไปยังเส้นทางการสร้าง แต่ไม่ได้แก้ไขปัญหาการเริ่มต้นเซิร์ฟเวอร์

ดังนั้นอย่าชี้ไหไปที่โฟลเดอร์ภายนอก

หรือ...

  1. หากคุณไม่ต้องการเพิ่มในเครื่องเพราะคุณกำลังแชร์ jar ระหว่างโครงการดังนั้น ...

หากคุณใช้อินสแตนซ์เซิร์ฟเวอร์ tc คุณต้องเพิ่ม jar เป็น jar ภายนอกเข้ากับเซิร์ฟเวอร์ที่รันการกำหนดค่า

ไปเพื่อเรียกใช้เรียกใช้การกำหนดค่า ... {อินสแตนซ์เซิร์ฟเวอร์ tc ของคุณ} จากนั้นแท็บเส้นทางคลาส

จากนั้นเพิ่ม jar การบันทึกทั่วไป


3

ฉันมีปัญหาเดียวกันกับคุณ ในที่สุดฉันก็ตรวจสอบเวอร์ชันของ apache ที่มีคลาสอยู่ ฉันพบว่าเวอร์ชัน 1.0.4 มีคลาส

ลองใช้รุ่น 1.0.4 แทน 1.1.X หรือ 1.2.X

การพึ่งพาของฉัน:

    <dependencies>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-client-java</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>
    </dependencies>

รหัส Java ของฉัน

J4pClient j4pClient = new J4pClient("http://localhost:8080/jolokia");
J4pReadRequest req = new J4pReadRequest("java.lang:type=Memory","HeapMemoryUsage");
req.setPath("used");
J4pReadResponse resp = j4pClient.execute(req);
System.out.println(resp.getValue());

ผลลัพธ์ของฉัน:

130489168

ตรวจสอบอีกครั้งว่าการพึ่งพา Maven ของคุณนำเข้าอย่างดี



0

เพียงแค่ตรวจสอบว่าคอมมอนส์ -login.jar ถูกเพิ่มไปยัง libs ของคุณและ classpath .. ฉันมีปัญหาเดียวกันและนั่นเป็นเพราะสิ่งนี้ dhammikas-


0

ฉันมักจะกำหนด classpath ให้กับตัวแปรแล้วตรวจสอบมัน ผมเคยเขียนสคริปต์ทับทิมขนาดเล็กซึ่งผมรวมไว้ในสคริปต์เริ่มต้นของฉันที่จะตรวจสอบ classpath ก่อนที่จะเปิดตัว Java การตรวจสอบ classpath ก่อนที่จะเริ่ม JVM ทำให้ฉันประหยัดเวลาในการแก้ไขปัญหาประเภทนี้


2
คุณควรพิจารณาใช้เครื่องมือเช่น Maven แทน
Neovibrant

0

สวัสดีฉันกำลังติดตามการกวดวิชาใน tutorialpoint.com เพิ่มหลังจากคุณทำขั้นตอนที่ 2 - ติดตั้ง Apache Common Logging API:คุณต้องนำเข้าไลบรารีjar ภายนอกเข้าสู่โครงการจากไฟล์ที่ดาวน์โหลดมาในขั้นตอนนี้ สำหรับฉันชื่อไฟล์คือ " commons-logging-1.1.1 "


0

หากคุณกำลังใช้งานบน Android โปรดทราบว่าjava.beansแพคเกจนั้นไม่สมบูรณ์บน Android ในการพยายามแก้ไขบน Android ลองทำดังต่อไปนี้:

  1. ดาวน์โหลดandroid-java-air-bridge.jar (ปัจจุบันปุ่มดาวน์โหลดอยู่ด้านล่างของหน้าหรือลิงค์โดยตรงที่นี่ )
  2. คัดลอก jar ที่ดาวน์โหลดไปยังไดเรกทอรี [ApproOT] / app / libs (หรือเชื่อมโยง jar ด้วยวิธีอื่นใด)
  3. เปลี่ยนimport ***ข้อความสั่งให้เป็นข้อความของ air-bridge เช่นimport javadz.beanutils.BeanUtilsแทนimport org.apache.commons.beanutils.BeanUtils;
  4. ทำความสะอาดและสร้างโครงการใหม่

แหล่งที่มา 1 , แหล่งที่ 2

ฉันขอโทษที่ฉันรู้ว่านี่ไม่ใช่การตอบคำถาม แต่หน้า SO นี้เกิดขึ้นมากมายเมื่อค้นหาNoClassDefFoundError: Failed resolution of: beanUtilsข้อผิดพลาดที่เกิดจาก Android


0

ฉันได้รับข้อผิดพลาดเดียวกันในขณะที่โถอยู่ ไม่มีวิธีแก้ไข สิ่งที่ใช้งานได้คือการลบ jar ออกจากระบบไฟล์ (จากไดเร็กทอรี. m2) แล้วทำความสะอาดโครงการ maven


0

ฉันมีปัญหาเดียวกันใน eclipse IDE ทางออกของฉันคือ: คลิกขวาในโครงการของฉัน> คุณสมบัติ

ป้อนคำอธิบายรูปภาพที่นี่

คลิกในMavenและเขียน: jarในActive Maven Project

ป้อนคำอธิบายรูปภาพที่นี่

ในที่สุด, ใช้และปิด


0

ในกรณีของฉันฉันกำลังทดสอบแอป Tomcat ใน eclipse และได้รับข้อผิดพลาดนี้ ฉันแก้ไขมันโดยการตรวจสอบ.classpathไฟล์และแก้ไขรายการนี้:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

แอตทริบิวต์org.eclipse.jst.component.dependencyขาดหายไป


-1

ตรวจสอบว่าขวดถูกนำเข้าอย่างถูกต้องหรือไม่ ฉันนำเข้าพวกเขาโดยใช้เส้นทางการสร้าง แต่ไม่รู้จัก jar ในโฟลเดอร์ WAR / lib ต่อมาผมคัดลอกขวดเดียวกันกับสงครามโฟลเดอร์ / lib มันใช้งานได้ดีในขณะนี้ คุณสามารถรีเฟรช / ทำความสะอาดโครงการของคุณ


-2

สวัสดีเพื่อน ๆ ถ้าคุณไม่ได้พบชั้นยกเว้นในรหัสจำศีลมันเป็นปัญหาของ jar files.here ส่วนใหญ่สองปัญหา
1. ฉันหมายถึงว่ารุ่นเก่าของคุณทำงานของไฮเบอร์เนตอาจ 3.2 ร้องดังนั้นถ้าคุณลองข้างต้น 3.6 จะ ทำงานได้ดี

2. ก่อนตรวจสอบการเชื่อมต่อฐานข้อมูลถ้าฐานข้อมูลทำงานอย่างถูกต้องข้อผิดพลาดในโปรแกรม ur หรือไฟล์ jar

โปรดตรวจสอบ prioblems สองตัวนี้หากยังใช้งานไม่ได้คุณพยายามใช้ IDE ฉันใช้ netbeanside 6.9 version.here จำศีลทำงานได้ดีคุณไม่ได้รับข้อผิดพลาดจากชั้นเรียนไม่ได้ยกเว้นข้อยกเว้น ..

ฉันหวังว่าอันนี้จะช่วยได้มากขึ้น




-3

หากทุกอย่างล้มเหลวอย่างที่มันมีให้ฉันลองวางคอมมอนส์ - การบันทึก - xyzjar ในไดเรกทอรี Tomcat lib ของคุณ มันแก้ปัญหาได้! BTW ฉันใช้ Tomcat 6


ชื่ออะไร คุณกำลังพูดเรื่องอะไร
บ๊อบโวลต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.