error: package org.apache.log4j does not exist while running code from cmd

error: package org.apache.log4j does not exist while running code from cmd

虽然 运行 javac Main.java 命令我得到一个 package org.apache.log4j does not exist 错误。

Main class

public class Main {

    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();

        logger.info("in Main class");
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project
        xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>example</artifactId>
    <version>1.0-SNAPSHOT</version>

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

log4j.properties

log4j.rootCategory=debug,console
log4j.logger.com.demo.package=debug,console
log4j.additivity.com.demo.package=false

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8

log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d [%t] %-5p %c - %m%n

我收到的错误消息是:

假设 1(错误):没有导入 post 源 class → 必须添加导入

您的 Main class 中似乎缺少 import 语句。 试试这个:

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;

public class Main {

    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();

        logger.info("in Main class");
    }
} 

真正的问题(在我修复 post 中的图像显示后)

您运行不是使用 Maven 而是使用 command-line javac 进行编译。如果没有 maven,您就不会将依赖项自动添加到您的 classpath.

如果你想从命令行运行

在这种情况下,您必须将 log4j 添加到 class路径中。 它看起来像这样(运行ning 来自 sources 目录,在默认的 maven 布局中是 <project_root>\src\main\java

javac company/Main.java -cp %userprofile%\.m2\repository\log4j\log4j.2.17\log4j-1.2.17.jar

我假设您的本地 Maven 存储库在默认 Windows 路径 %userprofile%\.m2 中。如果它在其他部分(或 Linux),则必须将路径更改为 log4j-1.2.17.jar.

在这种情况下,class Main.class 将被编译到与 Main.class 相同的包中。

如果要用maven编译

只需 运行 mvn compile 来自您的 pom.xml 所在的目录。 请注意,maven 会将 classes 编译到 target 目录中,即您编译的 class 将位于 \target\classes\company\Main.class 之类的路径中(相对于您的项目根目录,您的 pom.xml 是).