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

Log4j2依赖输入验证错误及Docker构建失败等问题咨询

问题解决:Docker构建失败+调试模式与版本查看

一、Docker构建错误(Unable to find main class)

问题分析

  1. Maven命令冗余:mvn clean package已经集成了spring-boot:repackage的功能,单独指定会触发重复执行逻辑,引发主类识别异常
  2. 主类配置缺失:Spring Boot项目需明确指定主类(带@SpringBootApplication注解的类),否则Maven无法自动识别
  3. 缓存利用不足:当前Dockerfile未按分层构建原则复制文件,会导致每次源码变更都重新下载依赖,降低构建效率

修正方案

1. 调整Maven构建命令

将原构建命令改为:

RUN mvn clean package -DskipTests

-DskipTests可跳过测试环节,加快构建速度(按需选择)

2. 补全pom.xml主类配置

在spring-boot-maven-plugin节点中添加主类全路径:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.6.1</version>
    <configuration>
        <mainClass>com.yourpackage.Log4jexampleApplication</mainClass> <!-- 替换为实际主类全路径 -->
    </configuration>
</plugin>

3. 优化后的Dockerfile

FROM maven:3.8.3-openjdk-8-slim

WORKDIR /app

# 先复制Maven配置文件,利用Docker缓存
COPY pom.xml .
COPY mvnw .
COPY mvnw.cmd .
COPY .mvn .mvn

# 预下载依赖(缓存步骤,避免重复下载)
RUN mvn dependency:go-offline

# 复制源码文件
COPY src ./src

# 构建项目
RUN mvn clean package -DskipTests

WORKDIR /app/target
EXPOSE 8080 
CMD ["java", "-jar", "../log4jexample-0.0.1-SNAPSHOT.jar"]

二、开启调试模式与版本查看

1. 开启调试获取栈追踪

修改Dockerfile的启动命令,添加JVM调试参数:

CMD ["java", "-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "../log4jexample-0.0.1-SNAPSHOT.jar"]

启动容器时映射调试端口:

docker run -p 8080:8080 -p 5005:5005 your-image-name

使用IDE连接容器的5005端口,即可断点调试并获取栈追踪信息。若需在日志中打印异常栈,可在代码中捕获异常时调用e.printStackTrace(),或调整Log4j配置将日志级别设为DEBUG。

2. 查看相关版本

  • Java版本:进入容器执行java -version,或在Dockerfile中添加RUN java -version查看构建环境版本
  • Spring Boot版本:查看pom.xml中spring-boot-starter-parent的版本,或运行jar包时执行java -jar your-app.jar --version
  • Log4j版本:查看pom.xml中log4j-core/log4j-api依赖的版本,或进入容器后执行mvn dependency:tree | grep log4j

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:52:44