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

Spring Boot如何生成仅含class文件的jar并将依赖单独存放部署到Docker

方案实现步骤

1. 调整Maven配置(pom.xml)

修改Spring Boot打包插件配置关闭默认胖包逻辑,新增依赖复制插件把所有第三方依赖导出到单独目录:

<build>
    <plugins>
        <!-- Spring Boot打包插件,仅生成包含项目自身class、配置的jar包 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 不内嵌任何第三方依赖 -->
                <includes>
                    <include>
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>
                </includes>
                <!-- 替换为你自己项目的启动类全路径 -->
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- 导出所有依赖到独立目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <!-- 依赖输出到target目录下的lib文件夹 -->
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 执行打包命令

在项目根目录执行maven打包指令:
mvn clean package
打包完成后target目录会生成两类产物:

  • 仅包含项目自身代码的可执行jar包,命名格式通常为{项目名}-{版本号}.jar
  • 名为lib的文件夹,内部存放项目所有第三方依赖jar

3. 编写Dockerfile

在项目根目录新建Dockerfile文件,内容如下:

# 基础镜像可根据项目JDK版本按需替换
FROM openjdk:8-jre-slim
WORKDIR /app
# 优先复制依赖层,利用Docker缓存减少后续构建耗时
COPY ./target/lib /app/lib
# 复制项目自身jar包
COPY ./target/*.jar /app/app.jar
# 启动命令,指定依赖加载路径,注意替换为自己的启动类全路径
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-cp","app.jar:lib/*","com.example.demo.DemoApplication"]

4. 构建镜像并运行

执行镜像构建指令:
docker build -t your-app-name:v1 .
运行容器可按需调整端口映射、环境变量等参数:
docker run -d -p 8080:8080 your-app-name:v1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:01