2013-10-29 20 views
6

Tôi gặp vấn đề với cây phụ thuộc và nhiều ràng buộc SLF4J. Những gì tôi phát hiện ra cho đến nay là thường này chỉ gây ra một cảnh báo nhưng trong trường hợp của tôi có vẻ như để ngăn chặn chương trình của tôi từ chạy: Đây là những trường hợp ngoại lệ tôi nhận được:Nhiều liên kết SLF4J gây ra lỗi?

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. SLF4J: Your binding is version 1.5.5 or earlier. SLF4J: Upgrade your binding to version 1.6.x. or 2.0.x Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

và đây là mảnh liên quan của tôi phụ thuộc: net.lightbody.bmp browsermob-proxy 2.0 beta-8

<!-- LOGGING DEPENDENCIES - LOG4J --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
    </dependency> 

ai đó có thể vui lòng cho tôi biết làm thế nào để giải quyết vấn đề này?

+0

Bạn đang bao gồm 'slf4j-log4j12' nhiều lần (trực tiếp hoặc gián tiếp thông qua một phụ thuộc khác) với các phiên bản khác nhau (1.5.3 và 1.6.1, theo thông báo lỗi). – Jesper

Trả lời

15

Có vài giải pháp này:

  • Hãy chắc chắn rằng bạn chỉ bao gồm một slf4j jar (có lẽ với các phiên bản cao hơn) nếu bạn có vài trong số họ với các phiên bản khác nhau trên con đường lớp học của bạn.
  • Thỉnh thoảng có thể không thể loại trừ nhiều lọ slf4j, vì chúng có thể được sử dụng bởi các lọ khác trong nội bộ, nằm trên đường dẫn lớp học của bạn. Những chai phụ thuộc này có thể đề cập đến các phiên bản khác nhau của lọ slf4j khiến ứng dụng của bạn bị lỗi. Trong trường hợp này, hãy chắc chắn rằng bạn có bình có phiên bản cao hơn của SLF4j được thêm vào trước khi bình khác sử dụng các bình SLF4J. Điều này sẽ đảm bảo rằng chương trình java của bạn sẽ nhận phiên bản mới nhất của SLF4J mà rõ ràng là tương thích ngược.
+0

Cảm ơn bạn! Giải pháp thứ hai làm việc cho tôi. – Biffy

+0

@Ankur Và làm thế nào để đảm bảo trong nhật thực rằng nó sẽ nhận mới nhất? –

+3

Chỉ định cái mới nhất đầu tiên trong đường dẫn xây dựng dự án của bạn. Để xác minh kiểm tra đơn hàng tệp .classpath của dự án của bạn. Nó sẽ hiển thị thứ tự các tệp jar được thêm vào. –

1

tôi sẽ đề nghị sử dụng phụ thuộc sau đây trong maven thay vào đó,

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.17</version> 
</dependency> 

này đã giải quyết vấn đề của tôi mặc dù tôi có nhiều phụ thuộc sử dụng slf4j.

0

Nếu dự án của bạn có sự phụ thuộc vào dự án khác và một trong những khác sử dụng slf4j cũng như với phiên bản khác nhau cố gắng sử dụng excusion

<exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
</exclusions> 
0

Đây là xảy ra khi có nhiều hơn một jar. Để kiểm tra xem có jar đã có sẵn hay không đi đến dự án -> tài nguyên java -> phụ thuộc maven và kiểm tra xem bình đã có sẵn ở đó hay chưa. Nếu nó có sẵn và bạn vẫn nhận được lỗi. Sau đó tìm vị trí của tệp jar đó trong thư mục .m2 \ resources và xóa thư mục hoàn chỉnh liên quan đến tệp jar đó rồi tải xuống phiên bản mới hơn và nhập nó vào dự án của bạn. :)

Thỉnh thoảng tôi gặp lỗi ngay cả khi tôi đã tải xuống tệp jar phù hợp với phiên bản đúng trong tệp pom.xml của tôi. Sau đó, tôi cần phải loại bỏ nó từ pom.xml của tôi và tải về rằng jar từ google và nhập khẩu nó vào project.Make của tôi chắc chắn nếu bạn làm điều đó thì đừng quên đi thuộc tính dự án -> Deployment Assembly tab-> Click Add -> Đường dẫn xây dựng đường dẫn Java và nhấp vào tệp jar đó và nhấp vào áp dụng.

Các vấn đề liên quan