【问题标题】:compilation error when referring to a library using maven使用 maven 引用库时出现编译错误
【发布时间】:2011-07-26 18:47:34
【问题描述】:

我是 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 compile 构建我的项目时,我得到:

[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

任何想法我做错了什么?

【问题讨论】:

    标签: java build maven compiler-errors pom.xml


    【解决方案1】:

    我不是Maven 专家,但log4j 范围应该是compile 而不是runtime。如果我错了,请纠正我。

    来自maven doc

    runtime - 这个范围表明 不需要依赖项 编译,但用于执行。它 在运行时和测试类路径中, 但不是编译类路径。

    【讨论】:

      【解决方案2】:

      如果你的范围是runtime,最初的意图可能是使用 SLF4J 或类似的东西。很容易为Logger 导入错误的命名空间。

      【讨论】:

        【解决方案3】:

        使用 compile 作用域,仍然将 jars 放入战争中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-06
          • 1970-01-01
          • 1970-01-01
          • 2020-09-19
          • 2013-06-16
          • 2013-10-28
          • 1970-01-01
          相关资源
          最近更新 更多