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

Maven执行go-offline后离线打包构建Docker镜像出现依赖缺失问题

问题根因

你遇到的报错是dependency:go-offline命令的默认行为缺陷导致的:

  • Maven 3.8.2版本自带的dependency:go-offline插件存在已知bug,不会完整拉取所有传递依赖的POM文件,也不会默认下载maven插件执行所需的依赖、所有scope的传递依赖(比如runtime scope、插件绑定的依赖)
  • 你当前的pom配置存在JDK版本不一致问题:properties中指定java.version为16,maven-compiler-plugin指定source/target为14,而基础镜像使用的是JDK15,版本不匹配会进一步加剧依赖拉取的异常
解决方案

方案1:调整go-offline命令参数(推荐,保留镜像分层缓存能力)

修改Dockerfile中依赖下载的RUN命令,追加参数拉取全量依赖:

# Build stage
FROM maven:3.8.2-adoptopenjdk-15 AS Build
COPY pom.xml /home/app
# 追加参数拉取插件依赖、所有scope的传递依赖
RUN mvn -f /home/app/pom.xml dependency:go-offline --include-plugin-dependencies -DexcludeGroupIds=org.projectlombok
COPY src /home/app/src
RUN mvn -f /home/app/pom.xml -o clean package -DskipTests

# Package stage
FROM adoptopenjdk/openjdk15
COPY --from=Build /home/app/target/mango-0.0.1-SNAPSHOT.jar /usr/local/lib/mango.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/mango.jar"]

同时统一pom中的JDK版本配置,和镜像JDK版本对齐:

<properties>
    <java.version>15</java.version>
</properties>
<!-- 后续maven-compiler-plugin的source、target也同步改为15 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>15</source>
        <target>15</target>
    </configuration>
</plugin>

方案2:跳过go-offline直接完成首次打包

如果不想调整参数,可以直接先执行一次联网打包跳过测试,再执行离线构建,保证所有依赖都已经被下载到本地缓存:

RUN mvn -f /home/app/pom.xml clean package -DskipTests \
    && rm -rf /home/app/target
RUN mvn -f /home/app/pom.xml -o clean package -DskipTests

方案3:更换Maven基础镜像版本

如果是Maven 3.8.2的版本bug导致的问题,可以直接更换为更高稳定版本的Maven基础镜像,比如maven:3.8.8-adoptopenjdk-15,规避版本自带的插件缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:06:01