You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gradle构建含log4j包的Java应用时出现编译错误求助

解决Log4j编译错误:package org.apache.log4j does not exist

嘿,这个问题我太熟了——你踩了Log4j 1.x和2.x版本API不兼容的坑啦!你在代码里导入的是旧版Log4j 1.x的包路径,但依赖的却是新版Log4j 2.x的库,编译器自然找不到对应的类。下面是一步步的解决方法:

1. 修正Java代码中的导入与Logger初始化

Log4j 2.x完全重构了API包结构,把旧的导入替换成新版的正确路径,同时获取Logger的方式也要调整:

错误的旧代码:

import org.apache.log4j.Logger;

public class App {
    private static final Logger logger = Logger.getLogger(App.class);
    // ... 其他代码
}

修正后的代码:

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class App {
    private static final Logger logger = LogManager.getLogger(App.class);
    
    public static void main(String[] args) {
        logger.info("Hello from Log4j 2!");
    }
}

2. 确认build.gradle的依赖配置正确

确保你的依赖使用Gradle推荐的implementation scope(旧版compile也兼容,但implementation是现在的标准),示例配置如下:

plugins {
    id 'java'
    id 'application'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.apache.logging.log4j:log4j-api:2.11.0'
    implementation 'org.apache.logging.log4j:log4j-core:2.11.0'
}

application {
    mainClass = 'App'
}

3. 添加Log4j 2配置文件(可选但推荐)

这一步不影响编译,但没有配置文件的话,运行时会输出一堆警告。在src/main/resources目录下创建log4j2.xml,示例内容:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

做完这些后,重新运行gradle build,应该就能顺利编译了!

内容的提问来源于stack exchange,提问作者Ahmed A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:34