我是maven的新手,我在构建项目时遇到了一些麻烦。 我已将log4j依赖项添加到pom文件
<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 clean命令。 现在,当我尝试使用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
任何想法我做错了什么?
答案 0 :(得分:16)
我不是Maven
专家,但log4j
范围应为compile
而不是runtime
。如果我错了,请纠正我。
来自maven doc,
运行时 - 此范围表示 不需要依赖 编译,但是用于执行。它 在运行时和测试类路径中, 但不是编译类路径。
答案 1 :(得分:3)
如果你的范围是runtime
,那么最初的意图可能就是使用SLF4J或者其他人。很容易为Logger
导入错误的命名空间。
答案 2 :(得分:0)
使用编译范围,仍然会将战争放入战争中。