2015-07-12 184 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> 
相关问题