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
相关产品推荐
相关产品推荐

