2016-01-15 64 views
0

我得到以下運行罐(Maven項目)後:的logback Maven的java.lang.NoClassDefFoundError:組織/ SLF4J /的LoggerFactory

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 

的誤差在變量的聲明引起的:

private static final Logger logger = LoggerFactory.getLogger("name.log"); 

這個錯誤造成的,因爲我需要添加到項目的類路徑中SLF4J實現(這是我的搜索小時後明白)

的解決方案,我已經閱讀在線sugges給POM增加一個依賴,並且它應該解決它。那麼,出於某種原因,它不適合我。

既然是Maven項目,我的pom.xml看起來是這樣的:

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.13</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.7.13</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.13</version> 
    </dependency> 

    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>1.1.3</version> 
    </dependency> 

可能是相關的:當我運行在Netbeans的(IDE)的項目,它記錄完美;但是一旦我構建並嘗試運行jar,它會拋出上面提到的異常。

我很感激幫助。

+2

可能的複製[ Maven依賴版本寧和java.lang.NoClassDefFoundError](http://stackoverflow.com/questions/1539078/maven-dependency-versioning-and-java-lang-noclassdeffounderror) –

+0

所有'java.lang.NoClassDefFoundError'由引起**完全相同的事情**指定的類是**不在類路徑**上,您如何解決它是如此廣泛和如此具體以至於它將脫離主題。 –

+0

@JarrodRoberson我不瞭解你的心態。首先,它不是您指出的那篇文章的副本。其次,以前的所有解決方案都不起作用,因此我在問。 – Alessandroempire

回答

-2

它與此問題無關,但只保留一個slf4實現,例如, SLF4J-簡單。

現在關於丟失的LoggerFactory。在應用程序服務器外部運行時,必須通過顯式類路徑或通過在生成的jar(fatjar)中嵌入所需的jar存檔來提供這些庫。

對於前面的選項,可以在命令行或jar清單中完成。

下面是一個聚甲醛,顯示使用所述清單和一fatjar的產生:

  • 沒有包裝,使用行家類路徑:

mvn clean compile antrun:run -Pclass-antrun

  • 包裝用類路徑清單內:

mvn clean package antrun:run -Pjar-antrun

  • 包裝一個fatjar:

mvn clean package antrun:run -Pfatjar

<?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>dummy-slf4j</groupId> 
    <artifactId>dummy-slf4j</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <properties> 
     <main.class>dummy.App</main.class> 

     <jdk.version>1.6</jdk.version> 
     <project.encoding>UTF-8</project.encoding> 

     <project.build.sourceEncoding>${project.encoding}</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>${project.encoding}</project.reporting.outputEncoding> 

     <maven.compiler.source>${jdk.version}</maven.compiler.source> 
     <maven.compiler.target>${jdk.version}</maven.compiler.target> 
     <maven.compiler.compilerVersion>${jdk.version}</maven.compiler.compilerVersion> 
     <maven.compiler.fork>true</maven.compiler.fork> 
     <maven.compiler.verbose>true</maven.compiler.verbose> 
     <maven.compiler.optimize>true</maven.compiler.optimize> 
     <maven.compiler.debug>true</maven.compiler.debug> 

     <maven.jar.plugin.version>2.6</maven.jar.plugin.version> 
     <maven.assembly.plugin.version>2.6</maven.assembly.plugin.version> 
     <maven.dependency.plugin.version>2.10</maven.dependency.plugin.version> 
     <maven.antrun.plugin.version>1.8</maven.antrun.plugin.version> 

    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.13</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <version>${maven.jar.plugin.version}</version> 
        <configuration> 
         <archive> 
          <manifest> 
           <mainClass>${main.class}</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
       </plugin> 
       <plugin> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>${maven.antrun.plugin.version}</version> 
       </plugin> 
       <plugin> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>${maven.assembly.plugin.version}</version> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>${main.class}</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-assembly</id> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <artifactId>maven-dependency-plugin</artifactId> 
        <version>${maven.dependency.plugin.version}</version> 
        <executions> 
         <execution> 
          <id>copy-dependencies</id> 
          <phase>package</phase> 
          <goals> 
           <goal>copy-dependencies</goal> 
          </goals> 
          <configuration> 
           <includeScope>runtime</includeScope> 
           <outputDirectory>${project.build.directory}/lib/</outputDirectory> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </pluginManagement> 

    </build> 

    <profiles> 
     <profile> 
      <id>jar-antrun</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-dependency-plugin</artifactId> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-jar-plugin</artifactId> 
         <configuration> 
          <archive> 
           <manifest> 
            <addClasspath>true</addClasspath> 
            <classpathPrefix>lib/</classpathPrefix> 
           </manifest> 
          </archive> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <configuration> 
          <target> 
           <java fork="true" 
            jar="${project.build.directory}/${project.build.finalName}.jar" /> 
          </target> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
     <profile> 
      <id>class-antrun</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <configuration> 
          <target> 
           <java fork="true" classname="${main.class}"> 
            <classpath refid="maven.compile.classpath" /> 
           </java> 
          </target> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
     <profile> 
      <id>fatjar</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-assembly-plugin</artifactId> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <configuration> 
          <target> 
           <java fork="true" 
           jar="${project.build.directory}/${project.build.finalName}-jar-with-dependencies.jar" /> 
          </target> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

隨着主要應用:

package dummy; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
public class App { 
    private static final Logger logger = LoggerFactory.getLogger(App.class); 
    public static void main(String[] args) { 
     logger.info("toto"); 
    } 
} 

UPDATE:添加配置文件的fatjar的

+0

pom.xml看起來相當長。有什麼機會可以縮短到相關的細節? –

相關問題