2011-03-31 39 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

使用编译范围,仍然把罐子放入战争。