Bắt java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory ngoại lệ


188

tôi đang thực hiện chương trình tiêm phụ thuộc đơn giản vào mùa xuân và nhận được ngoại lệ này. Tôi đã bao gồm tệp common-log1.1.1.jar và spring.jar. Bạn có thể vui lòng giúp đỡ để ra ngoài?

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
Đầu tiên, kiểm tra lại xem đường dẫn của bạn có thực sự chính xác không. Thứ hai, hãy thử mở jar và kiểm tra xem nó có thực sự chứa lớp org.apache.commons.logging.LogFactory không. Cuối cùng, hãy thử gỡ lỗi bằng cách đặt điểm dừng trong trình nạp lớp.
Kolibri

2
Tất cả các câu trả lời dưới đây gợi ý commons-logginglà một bước lùi. Sử dụng jcl-over-slf4jthay thế.
opyate

Trong Android, hãy thêm testCompile 'commons-log: commons-log: 1.1.1' vào app.gradle
Roger Garzon Nieto

Câu trả lời:


118

Tôi cũng đã phải đối mặt với các vấn đề tương tự, để khắc phục, tải xuống các tệp jar từ url bên dưới

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

và sao chép vào thư mục lib của bạn, sẽ giải quyết vấn đề của bạn.


2
điều này không hiệu quả với tôi, ngay cả sau khi thêm jar commons đã đề cập ở trên trong classpath
Deen John

2
Không phải cho tôi. Những libs bị hỏng. Thật là bực bội.
Wesos de Queso

112

Nếu bạn đang sử dụng maven để quản lý các phụ thuộc, hãy thêm dòng sau vào tệp pom.xml của bạn:

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


19

commons-log-1.1.1.jar hoặc jcl-over-slf4j-1.7.6.jar al

Nếu bạn đang sử dụng maven, hãy sử dụng mã dưới đây.

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

2
Bao gồm "jcl-over-slf4j" là giải pháp duy nhất phù hợp với tôi. Tôi đã có đăng nhập chung trong các phụ thuộc của tôi.
Italo Borssatto

Tôi đang sử dụng phiên bản spring-boot 2.0.1.RELEASE với maven. Đây là giải pháp duy nhất hiệu quả với tôi.
Carlos Nantes

18

Tôi đã có cùng một vấn đề và giải quyết nó bằng cách thêm commons-logging.jarđường dẫn lớp.



6

Tôi đã bao gồm common-log1.1.1.jar và ...

Bạn có chắc là bạn đánh vần đúng tên của tệp JAR đúng không? Tôi nghĩ rằng nó có thể nên được commons-logging-1.1.1.jar(lưu ý thêm -trong tên). Ngoài ra kiểm tra xem tên thư mục là chính xác.

NoClassDefFoundError luôn có nghĩa là không thể tìm thấy một lớp, vì vậy rất có thể đường dẫn lớp của bạn không đúng.


2
NoClassDefFoundErrorcũng có thể được gây ra bởi các trường hợp góc khác, như khi khởi tạo lớp không thành công trong các trường hợp tối nghĩa.
skaffman

Hơn nữa, nếu anh ta nhận được NoClassDefFoundError vì việc khởi tạo lớp không thành công, thì anh ta nên có một ngoại lệ ExceptionInitializerError trước (trừ khi tất nhiên nó bị bắt một cách im lặng).
Kolibri

Và đừng quên "s"commons-logging-1.1.1.jar
Glenn Lawrence

@GlennLawrence Cảm ơn, đã sửa tên.
Jesper

6

Đặt phạm vi để biên dịch đã làm điều đó cho tôi

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

1
Giải quyết tình huống của tôi. Khi chạy các trường hợp thử nghiệm Mockito, tôi đã gặp lỗi này và đã giải quyết được sự phụ thuộc này trong pom.xml.
venugopal

4

Hãy thử làm sạch hoàn toàn thư mục đích / triển khai cho ứng dụng để thoát khỏi mọi thư viện cũ. Tạo một bản dựng mới và kiểm tra xem commons-log.jar có thực sự được đặt trong thư mục lib chính xác không. Nó có thể không được bao gồm khi bạn đang xây dựng thư viện cho ứng dụng.


4

Vấn đề được giải quyết bằng cách thêm commons-log.jar

Tập tin Imp là,

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

Hai tùy chọn (ít nhất):

  1. Thêm jar đăng nhập commons vào tệp của bạn bằng cách sao chép nó vào một thư mục cục bộ.

Lưu ý: liên kết jar có thể dẫn đến các sự cố với máy chủ và có thể là lý do tại sao nó được thêm vào đường dẫn xây dựng nhưng không giải quyết được vấn đề khởi động máy chủ.

Vì vậy, đừng trỏ bình vào một thư mục bên ngoài.

HOẶC LÀ...

  1. Nếu bạn thực sự không muốn thêm nó cục bộ vì bạn đang chia sẻ bình giữa các dự án, thì ...

Nếu bạn đang sử dụng một cá thể máy chủ tc, thì bạn cần thêm jar dưới dạng jar bên ngoài vào cấu hình máy chủ chạy cấu hình.

đi để chạy như, chạy các cấu hình ..., {ví dụ máy chủ tc của bạn}, và sau đó là tab Đường dẫn lớp.

Sau đó thêm bình đăng nhập chung.


3

Tôi gặp rắc rối tương tự như bạn. Cuối cùng tôi đã kiểm tra phiên bản apache sở hữu lớp. Tôi thấy rằng phiên bản 1.0.4 có lớp.

Hãy thử sử dụng phiên bản 1.0.4 thay vì 1.1.X hoặc 1.2.X

Phụ thuộc của tôi:

    <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>

Mã Java của tôi

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());

Kết quả của tôi:

130489168

Kiểm tra hai lần rằng các phụ thuộc maven của bạn được nhập khẩu tốt.



0

Chỉ cần kiểm tra xem commons-log.jar đã được thêm vào libs của bạn và classpath chưa .. Tôi có cùng một vấn đề và đó là vì điều này. pháp-


0

Tôi thường gán classpath cho một biến và sau đó xác minh nó. Tôi đã viết một tập lệnh ruby ​​nhỏ mà tôi đưa vào tập lệnh khởi động của mình để xác nhận đường dẫn lớp trước khi khởi chạy java . Việc xác thực đường dẫn lớp trước khi JVM khởi động đã giúp tôi tiết kiệm rất nhiều thời gian để khắc phục các loại sự cố này.


2
Bạn nên xem xét sử dụng các công cụ như Maven thay thế.
Neovibrant

0

Này, tôi đã làm theo hướng dẫn trên guidepoint.com. Thêm sau khi bạn hoàn thành Bước 2 - Cài đặt API ghi nhật ký chung của Apache: Bạn phải nhập các thư viện jar bên ngoài vào dự án từ các tệp được tải xuống ở bước này. Đối với tôi, tên tệp là " commons-log-1.1.1 ".


0

Nếu bạn đang chạy cái này trên Android thì lưu ý rằng dường như java.beansgói không hoàn thành trên Android. Để cố gắng sửa nó trên Android, hãy thử như sau:

  1. Tải xuống android-java-air-Bridge.jar (hiện tại nút tải xuống ở cuối trang hoặc liên kết trực tiếp tại đây )
  2. Sao chép jar đã tải xuống vào thư mục [APPROOT] / app / libs của bạn (hoặc liên kết jar theo bất kỳ cách nào khác)
  3. Thay đổi các import ***báo cáo thành của cầu không khí. Ví dụ import javadz.beanutils.BeanUtilsthay vìimport org.apache.commons.beanutils.BeanUtils;
  4. Làm sạch và xây dựng lại dự án

nguồn 1 , nguồn 2

Tôi xin lỗi vì tôi nhận ra rằng đây không phải là trả lời chính xác câu hỏi, mặc dù trang SO này xuất hiện rất nhiều khi tìm kiếm các NoClassDefFoundError: Failed resolution of: beanUtilslỗi do Android tạo ra .


0

Tôi đã nhận được cùng một lỗi trong khi bình có mặt. Không có giải pháp làm việc. Những gì làm việc là xóa jar từ hệ thống tệp (từ thư mục .m2) và sau đó làm sạch dự án maven.


0

Tôi có cùng một vấn đề trong IDE nhật thực, giải pháp của tôi là: Nhấp chuột phải vào Dự án của tôi> Thuộc tính

nhập mô tả hình ảnh ở đây

Nhấp vào Maven và viết: jar trong Dự án Active Maven

nhập mô tả hình ảnh ở đây

Cuối cùng, Áp dụng và Đóng


0

Trong trường hợp của tôi, tôi đã thử nghiệm một ứng dụng Tomcat trong nhật thực và gặp lỗi này. Tôi đã giải quyết nó bằng cách kiểm tra .classpathtệp và sửa mục này:

<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>

Thuộc tính org.eclipse.jst.component.dependencyđã bị mất.


-1

Kiểm tra xem các lọ được nhập khẩu đúng cách. Tôi đã nhập chúng bằng cách sử dụng đường dẫn xây dựng. Nhưng nó không nhận ra jar trong thư mục WAR / lib. Sau đó, tôi đã sao chép cùng một jar vào thư mục war / lib . Nó hoạt động tốt bây giờ. Bạn có thể làm mới / làm sạch dự án của bạn.


-2

Xin chào bạn bè nếu bạn nhận được bất kỳ ngoại lệ nào trong mã hibernate thì đó là sự cố của tệp jar. Chủ yếu có hai vấn đề 1. Ý tôi
là nói phiên bản cũ của hibernate có thể là 3.2 dưới đây. hoạt động tốt

2.first kiểm tra kết nối cơ sở dữ liệu. Nếu cơ sở dữ liệu hoạt động đúng thì đó là một lỗi trong chương trình ur hoặc tệp jar.

vui lòng kiểm tra hai nguyên tắc này nếu nó cũng không hoạt động bạn đã cố gắng để IDE. Tôi đang sử dụng phiên bản netbeanside 6.9. Ở đây hibernate hoạt động tốt. Bạn không nhận được bất kỳ lỗi nào từ lớp không ngoại lệ.

Tôi hy vọng điều này sẽ giúp nhiều hơn




-3

Nếu vẫn thất bại, như tôi đã làm, hãy thử đặt commons-log-xyzjar vào thư mục lib Tomcat của bạn. Nó đã giải quyết vấn đề! BTW, tôi đang sử dụng Tomcat 6.


tên điều gì? bạn đang nói về cái gì vậy
Bob V.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.