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

使用Dockerfile构建Java项目时依赖下载失败的问题

问题:Docker中Maven离线构建依赖缺失,本地执行正常

我有一个Maven管理的Java项目,本地执行./mvnw -B dependency:go-offline和./mvnw -o package -DskipTests完全正常,但在Docker镜像构建时执行相同命令,出现部分依赖下载失败的情况。

我的Dockerfile内容:

FROM eclipse-temurin:18.0.2.1_1-jdk-focal AS builder
ENV APP=/home/meapi/app
WORKDIR $APP
COPY .mvn .mvn
COPY mvnw pom.xml ./
RUN ./mvnw -B dependency:go-offline
COPY src src
RUN ./mvnw -o package -DskipTests

FROM eclipse-temurin:18.0.2.1_1-jre-focal as dev
RUN addgroup --system meapi && adduser --system --group meapi
ENV spring_profiles_active=development
ENV APP=/home/meapi/app
WORKDIR $APP
RUN chown -R meapi:meapi $APP
USER meapi
COPY --chown=meapi:meapi --from=builder $APP/target/*.jar $APP/app.jar
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/usr/meapi/app/app.jar" ]

构建时出现如下错误:

=> ERROR [builder 7/7] RUN ./mvnw -o package -DskipTests                                                                            12.9s
------                                                                                                                                    
 > [builder 7/7] RUN ./mvnw -o package -DskipTests:                                                                                        
#14 7.221 [INFO] Scanning for projects...                                                                                                  
#14 8.659 [INFO]                                                                                                                           
#14 8.659 [INFO] ---------------------< com.me:me-api >----------------------                                                  
#14 8.660 [INFO] Building me-api 0.0.1-SNAPSHOT                                                                                   
#14 8.660 [INFO] --------------------------------[ jar ]---------------------------------
#14 10.43 [WARNING] The POM for javax.xml.bind:jaxb-api:jar:2.3.1 is missing, no dependency information available
#14 11.03 [WARNING] The POM for com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.13.3 is missing, no dependency information available
#14 11.11 [WARNING] The POM for net.minidev:json-smart:jar:2.4.8 is missing, no dependency information available
#14 11.19 [WARNING] The POM for net.bytebuddy:byte-buddy:jar:1.12.10 is missing, no dependency information available
#14 11.20 [WARNING] The POM for net.bytebuddy:byte-buddy-agent:jar:1.12.10 is missing, no dependency information available
#14 11.35 [WARNING] The POM for org.glassfish.jaxb:jaxb-runtime:jar:2.3.6 is missing, no dependency information available
#14 12.79 [INFO] ------------------------------------------------------------------------
#14 12.79 [INFO] BUILD FAILURE
#14 12.79 [INFO] ------------------------------------------------------------------------
#14 12.82 [INFO] Total time:  5.758 s
#14 12.83 [INFO] Finished at: 2022-09-13T19:58:59Z
#14 12.83 [INFO] ------------------------------------------------------------------------
#14 12.85 [ERROR] Failed to execute goal on project me-api: Could not resolve dependencies for project com.me:me-api:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: javax.xml.bind:jaxb-api:jar:2.3.1, com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.13.3, net.minidev:json-smart:jar:2.4.8, net.bytebuddy:byte-buddy:jar:1.12.10, net.bytebuddy:byte-buddy-agent:jar:1.12.10, org.glassfish.jaxb:jaxb-runtime:jar:2.3.6: Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact javax.xml.bind:jaxb-api:jar:2.3.1 has not been downloaded from it before. -> [Help 1]
#14 12.85 [ERROR] 
#14 12.85 [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
#14 12.85 [ERROR] Re-run Maven using the -X switch to enable full debug logging.
#14 12.85 [ERROR] 
#14 12.85 [ERROR] For more information about the errors and possible solutions, please read the following articles:
#14 12.85 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
------
executor failed running [/bin/sh -c ./mvnw -o package -DskipTests]: exit code: 1

使用的构建命令:docker build --no-cache --platform linux/amd64 --tag api --target dev .

解决方案

核心问题是dependency:go-offline并未下载所有构建阶段需要的依赖——它仅覆盖了编译、运行时的直接依赖,而打包过程中可能需要插件依赖、间接依赖,这些没被提前拉取。以下是几种可行的解决方法:

方法1:用compile目标替换dependency:go-offline

compile命令会触发所有编译相关的依赖下载,包括插件所需的依赖,能更全面地覆盖后续离线打包的需求。修改builder阶段的命令:

FROM eclipse-temurin:18.0.2.1_1-jdk-focal AS builder
ENV APP=/home/meapi/app
WORKDIR $APP
COPY .mvn .mvn
COPY mvnw pom.xml ./
RUN ./mvnw -B compile -DskipTests  # 替换原有的dependency:go-offline
COPY src src
RUN ./mvnw -o package -DskipTests

方法2:扩展dependency:go-offline的参数

添加dependency:resolve-plugins来下载插件依赖,同时确保覆盖所有profile的依赖:

RUN ./mvnw -B dependency:go-offline dependency:resolve-plugins -DskipTests

方法3:先执行一次完整的在线打包

如果上述方法仍不生效,可以先在线执行一次完整打包,确保所有依赖都被下载到镜像内的Maven仓库,再执行离线打包:

RUN ./mvnw -B package -DskipTests
COPY src src
RUN ./mvnw -o package -DskipTests

额外检查

确认Docker daemon能正常访问Maven中央仓库,没有被代理、防火墙限制——毕竟第一次下载依赖需要网络连接。

内容的提问来源于stack exchange,提问作者João Casarin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:22