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

如何为依赖Library的Gradle多项目API-REST编写Dockerfile

Gradle多项目Docker部署依赖缺失问题解决

你的问题核心在于:API-REST子项目生成的普通JAR未包含依赖的Library模块代码,本地IntelliJ运行时会自动将Library加入类路径,而Docker容器中仅加载单独的JAR,导致依赖缺失。以下是两种可行的解决方法:

方案1:构建包含所有依赖的可执行JAR(推荐)

通过Gradle插件将Library模块及其他第三方依赖打包进一个可执行的"胖JAR"中,确保容器运行时能找到所有依赖类。

针对Spring Boot项目

Spring Boot自带的bootJar任务默认会打包所有依赖,只需确保API-REST的build.gradle配置正确:

plugins {
    id 'org.springframework.boot' version '2.7.15' // 替换为你的实际版本
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'java'
}

dependencies {
    implementation project(':Library')
    // 其他第三方依赖...
}

执行打包命令(在项目根目录运行):

./gradlew :API-REST:bootJar

生成的JAR文件路径为API-REST/build/libs/API-REST-0.0.1-SNAPSHOT.jar。

针对非Spring项目

引入Shadow插件来构建包含所有依赖的JAR:

plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '7.1.2' // 替换为最新版本
}

dependencies {
    implementation project(':Library')
    // 其他第三方依赖...
}

执行打包命令:

./gradlew :API-REST:shadowJar

生成的JAR文件路径为API-REST/build/libs/API-REST-0.0.1-SNAPSHOT-all.jar(默认带-all后缀)。

修改Dockerfile

根据生成的JAR路径调整Dockerfile:

FROM openjdk:11
EXPOSE 8080
RUN mkdir -p /app/
# Spring Boot项目用这行
ADD ./API-REST/build/libs/API-REST-0.0.1-SNAPSHOT.jar /app/api-rest.jar
# 非Spring项目替换为Shadow生成的JAR
# ADD ./API-REST/build/libs/API-REST-0.0.1-SNAPSHOT-all.jar /app/api-rest.jar
ENTRYPOINT ["java", "-jar", "/app/api-rest.jar"]

注意:需在项目根目录执行docker build .,确保Docker能访问到子项目的JAR文件。

方案2:Docker多阶段构建(容器内完成编译)

直接在Docker容器中用Gradle镜像完成项目编译和打包,避免本地环境差异导致的依赖问题:

# 第一阶段:编译构建
FROM gradle:7.6-jdk11 AS builder
WORKDIR /app
COPY . .
# Spring项目用bootJar,非Spring项目替换为shadowJar
RUN gradle :API-REST:bootJar --no-daemon

# 第二阶段:运行镜像
FROM openjdk:11
EXPOSE 8080
RUN mkdir -p /app/
COPY --from=builder /app/API-REST/build/libs/API-REST-0.0.1-SNAPSHOT.jar /app/api-rest.jar
ENTRYPOINT ["java", "-jar", "/app/api-rest.jar"]

构建并运行:

docker build . -t api-rest
docker run -p 8080:8080 api-rest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:28:20