2011-03-31 40 views
5

我是maven的新手,我在構建項目時遇到了一些麻煩。 我已經添加了log4j的依賴關係的POM文件當使用maven引用一個庫時編譯錯誤

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
     <scope>runtime</scope> 
    </dependency> 

,我使用它在正常使用中我班的一個

import org.apache.log4j.Logger; 

public class ConnectionPoolImpl implements Runnable, ConnectionPool { 
    static Logger logger = Logger.getLogger(ConnectionPoolImpl.class); 

編譯順利,直到我已經使用了MVN清潔命令。 現在,當我嘗試使用MVN建立我的項目編譯我得到:

[INFO] Compiling 2 source files to C:\Temp\cp\target\classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[9,23] package org.apache.log4j does not exist 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[19,9] cannot find symbol 
symbol : class Logger 
location: class com.opower.connectionpool.ConnectionPoolImpl 
[ERROR] \Temp\cp\src\main\java\com\opower\connectionpool\ConnectionPoolImpl.java 
:[19,25] cannot find symbol 
symbol : variable Logger 
location: class com.opower.connectionpool.ConnectionPoolImpl 
[INFO] 3 errors 

任何想法我做錯了嗎?

回答

16

我不是Maven專家,但log4j範圍應該是compile而不是runtime。如果我錯了,請糾正我。

maven doc

運行 - 這個範圍表明 依賴不需要 編譯,但執行。它 是在運行時和測試類路徑, 但不是編譯類路徑。

+0

它的工作。感謝你們! – special0ne 2011-03-31 15:30:22

3

如果你有範圍爲runtime,初衷可能是使用SLF4J或諸如此類來代替。非常容易爲Logger導入錯誤的名稱空間。

0

使用編譯範圍,仍然把罐子放入戰爭。