2015-07-12 394 views
0

我對maven來說是全新的,花了幾個教程,並決定使用slf4j做一些日誌記錄,但是我一直收到一個錯誤,指出找不到該類。maven slf4j如何添加到類路徑

經過一些互聯網搜索,我試圖添加插件等到我的pom.xml,但似乎沒有任何工作。

例外情況是這樣的:

java -cp target/MavenTest-1.0-SNAPSHOT.jar org.nilun.App 
Hello World! 
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at org.nilun.App.main(App.java:15) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

這裏是我的pom.xml的片段

<dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <scope>test</scope> 
      <version>4.11</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.12</version> 
     </dependency>  
    </dependencies> 

很簡單的類

package org.nilun;  
import org.slf4j.*; 
/** 
* Hello world! 
* 
*/ 
public class App 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello World!"); 
     Logger logger = LoggerFactory.getLogger(App.class); 
     logger.info("Hello World!"); 
    }  
} 

的JAR文件位於我$ HOME/development/lib 當然它已經添加到我的eclipse構建路徑

歡迎任何想法來解決這個問題。

謝謝!

回答

0

我認爲執行程序的方式是問題所在。如果我在Eclipse中執行代碼,它工作得很好(添加這種依賴性

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

,您將需要解決的另一個例外,根據SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"後)。但是,當我使用「java -cp target/MavenTest-1.0-SNAPSHOT.jar org.nilun.App」時,我得到和你一樣的異常。

編輯:要創建包含依賴關係的.jar文件,看看Maven的大會插件(在這裏是一個很好的和簡短的介紹:https://maven.apache.org/plugins/maven-assembly-plugin/usage.html)。您需要將以下內容添加到您的POM:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.5.5</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>de.clanue.MavenTest.App</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

現在,使用Maven構建項目創建一個文件 「MavenTest-0.0.1-SNAPSHOT-JAR-與-dependencies.jar」 目標文件夾。它包含您的依賴關係,您可以使用「java -jar target/MavenTest-0.0.1-SNAPSHOT-jar-with-dependencies.jar」運行它。

+0

不知道,但這個問題可能涉及到的相關性.jar文件無法導入到我打包jar文件。 –

+0

是的,我認爲你是對的。我編輯了我的答案,這就是你如何實現這一目標。 – Lupa

0

嗨Lupa,謝謝你的幫助。 在您的指導下,我得到了它的工作。 我所做的是以下插件文件夾添加到

  1. 複製到目標/ lib文件夾
  2. 的/lib....jar添加到清單文件。

再次感謝您的幫助!

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib</classpathPrefix> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.10</version> 
     <executions> 
      <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>false</overWriteSnapshots> 
       <overWriteIfNewer>true</overWriteIfNewer> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build>