错误:从 cmd 运行代码时,包 org.apache.log4j 不存在

问题描述 投票:0回答:1

运行

javac Main.java
命令时,出现
package org.apache.log4j does not exist
错误。

Main
班级

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

我收到的错误消息是:

enter image description here

java maven cmd log4j
1个回答
1
投票

假设1(错误):源类中没有发布导入→必须添加导入

您的

import
课程中似乎缺少
Main
语句。 试试这个:

    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");
        }
    } 

真正的问题(在我修复了帖子中的图像显示之后)

您不是使用 maven 运行编译,而是使用命令行

javac
。如果没有 Maven,您就不会自动将依赖项添加到您的类路径中。

如果你想从命令行运行

在这种情况下,您必须将 log4j 添加到类路径中。 它看起来像这样(从源目录运行,在默认的 maven 布局中是

<project_root>\src\main\java

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

我假设您的本地 Maven 存储库位于默认的 Windows 路径中

%userprofile%\.m2
。如果它在其他部分(或Linux),您必须更改您的
log4j-1.2.17.jar
的路径。

在这种情况下,类

Main.class
将被编译到
Main.class
所在的同一个包中。

如果你想用Maven编译

只需从

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

© www.soinside.com 2019 - 2024. All rights reserved.