2013-05-19 84 views
1

我試圖讓log4j的一個簡單的應用程序工作,但我得到的消息:如何在Maven和可執行jar文件中使用log4j?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger 

我執行與該命令的應用程序:

java -jar lunchtracker-1.0-SNAPSHOT.jar 

log4j.properties文件是在src/main/resources中。這是我的pom.xml:

<project <snip -- was messing up formatting>> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>net.uofitorn</groupId> 
    <artifactId>lunchtracker</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>lunchtracker</name> 
    <url>http://maven.apache.org</url> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>net.uofitorn.LunchTrackerServer</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
      <scope>compile</scope> 
     </dependency> 
    </dependencies> 
</project> 

這裏是我的Java代碼:

import org.apache.log4j.Logger; 
<snip> 
Logger logger = Logger.getLogger(LunchTrackerServer.class.getName()); 
logger.debug("Server started"); 

我認爲這個問題是log4j的罐子不被包含在我的jar文件。當我解壓縮jar時,我沒有看到它。我如何讓maven在我的jar中包含log4j依賴項?

+1

我對此並不是100%,但我相信你可以像這樣在'java'命令中包含所有必需的jar:'java -cp「lunchtracker-1.0-SNAPSHOT.jar; path-to-log4j-jar/log4j-1.2.16.jar「my.package.MainClass」。 – acdcjunior

回答

0

當使用Maven依賴管理您應該使用一個IDE的依賴添加到類路徑,或使用maven EXEC運行主類:JAVA目標maven exec插件(請參閱http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html)。

要做到這一點,你需要指定在pom.xml主類並且使用命令在命令行中運行它:

mvn exec:java 

或者直接在命令行中運行它:

mvn exec:java -Dexec.mainClass="net.uofitorn.LunchTrackerServer" 
相關問題