2016-09-23 48 views
2

我遇到了使用Spring配置slf4j的麻煩。我使用Maven的,我可以包一個.jar,但是當我運行它,它提供了以下異常:slf4中的java.lang.NoClassDefFoundError與彈簧

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
     at logger.Log.<clinit>(Log.java:8) 
     at app.App.main(App.java:29) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
     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) 
     ... 2 more 

這裏是我如何使用SLF4J:

public class Log implements ILog { 

    private static final Logger LOGGER = LoggerFactory.getLogger(Log.class); 

    @Override 
    public void reportMessage(String message) { 
     LOGGER.info(message); 
    } 

    @Override 
    public void reportWarningMessage(String message) { 
     LOGGER.warn(message); 
    } 

    @Override 
    public void reportErrorMessage(String message) { 
     LOGGER.error(message); 
    } 
} 

和這裏的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>pt.isel.ps</groupId> 
    <artifactId>neat</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.5.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.19</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-jdk14</artifactId> 
      <version>1.7.19</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.5.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <version>1.3.0.RELEASE</version> 
       <configuration> 
        <mainClass>app.App</mainClass> 
        <layout>ZIP</layout> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

如果有人能幫助我,我會非常感激。

+1

可能重複的[java.lang.NoClassDefFoundError:org.slf4j.LoggerFactory](http://stackoverflow.com/questions/12926899/java-lang-noclassdeffounderror-org-slf4j-loggerfactory) –

+0

我試過了什麼在你提到的答案中被提出,但仍然得到那個錯誤...... – gqmartins

回答

0

顯然,org.slf4j.LoggerFactory類不能在你的類路徑下找到。

  1. 再次嘗試拉動的依賴,通過命令行,並從項目文件夾:dependency:copy-dependencies
  2. 嘗試通過刷新項目同步您的Eclipse IDE,和/或通過更新相關M2E Eclipse插件。
  3. 從您的項目文件夾中的命令行&嘗試使用重新編譯:mvn clean compile
  4. 如果不工作,尋找下Maven依賴的unfound類項目,(你應該能找到)。
  5. 確保您的Maven依賴關係是您的構建配置的一部分。
  6. 嘗試重新編譯:mvn clean compile

如果你在你的本地倉庫所要求的相關性,它包含在你的項目,你的構建配置包括Maven依賴被包含在輸出類路徑文件夾。那麼它應該工作。