SpringBoot项目打jar包自定义名称完全指南
SpringBoot项目打jar包自定义名称完全指南
前言
作为一名Java开发者,你是否遇到过这样的困扰:SpringBoot项目打包后生成的jar文件名又长又复杂,比如my-project-1.0.0-SNAPSHOT.jar
?部署时总是要记住这个复杂的文件名,既不方便也容易出错。
今天我们就来学习如何给SpringBoot项目的jar包起一个简洁明了的名字!
问题场景
默认情况下,Maven打包SpringBoot项目时,生成的jar文件名格式为:
{artifactId}-{version}.jar
例如,如果你的项目配置是:
<groupId>com.example</groupId>
<artifactId>my-springboot-app</artifactId>
<version>1.0.0</version>
那么打包后的文件名就是:my-springboot-app-1.0.0.jar
但在实际开发中,我们可能希望jar包有一个更简洁、更有意义的名字,比如:app.jar
或 spring-admin.jar
。
解决方案:使用finalName
Maven提供了<finalName>
标签来自定义最终生成的文件名。
基本用法
在项目的pom.xml
文件中,找到<build>
节点,添加<finalName>
配置:
<build><finalName>spring-admin</finalName><!-- 其他配置... -->
</build>
完整示例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><groupId>com.jbolt</groupId><artifactId>jbolt_ai_platform_springboot</artifactId><version>2.5.0</version><name>spring-admin</name><build><!-- 自定义打包后的文件名 --><finalName>spring-admin</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>cn.jbolt.JBoltAIPlatformApplication</mainClass></configuration></plugin></plugins></build>
</project>
操作步骤
步骤1:修改pom.xml
- 打开项目根目录下的
pom.xml
文件 - 找到
<build>
标签(如果没有就创建一个) - 在
<build>
标签内添加<finalName>你想要的名字</finalName>
步骤2:重新打包
保存pom.xml文件后,执行Maven打包命令:
# 方式1:使用Maven命令
mvn clean package# 方式2:如果使用Maven Wrapper
./mvnw clean package# 方式3:在IDE中运行
# 右键项目 -> Run As -> Maven build -> 输入 clean package
步骤3:查看结果
打包完成后,在项目的target
目录下,你会看到生成的jar文件名已经变成你指定的名字了!
target/
├── spring-admin.jar ← 这就是我们自定义的名字
├── spring-admin.jar.original ← 原始jar包(不包含依赖)
└── 其他文件...
原理解释
finalName的作用机制
<finalName>
标签告诉Maven在打包时使用指定的名字- 这个配置会影响所有类型的打包结果(jar、war、zip等)
- SpringBoot的maven插件会在此基础上生成可执行的jar包
文件说明
打包后你会看到两个jar文件:
- spring-admin.jar - 可执行的"Fat JAR",包含了所有依赖,可以直接运行
- spring-admin.jar.original - 原始jar包,只包含项目代码,不包含依赖
我们部署时使用的是第一个文件。
高级用法
1. 动态命名
你可以在finalName中使用Maven属性:
<properties><app.name>my-app</app.name><deploy.env>prod</deploy.env>
</properties><build><finalName>${app.name}-${deploy.env}</finalName>
</build>
这样会生成:my-app-prod.jar
2. 包含版本信息
<build><finalName>${project.name}-v${project.version}</finalName>
</build>
3. 时间戳命名
<properties><maven.build.timestamp.format>yyyyMMdd-HHmm</maven.build.timestamp.format>
</properties><build><finalName>app-${maven.build.timestamp}</finalName>
</build>
实际应用场景
场景1:微服务项目
在微服务架构中,每个服务都可以有一个简洁的名字:
<!-- 用户服务 -->
<finalName>user-service</finalName><!-- 订单服务 -->
<finalName>order-service</finalName><!-- 网关服务 -->
<finalName>gateway</finalName>
场景2:不同环境部署
<!-- 开发环境 -->
<finalName>app-dev</finalName><!-- 生产环境 -->
<finalName>app-prod</finalName>
场景3:Docker部署
<finalName>app</finalName>
对应的Dockerfile:
FROM openjdk:8-jre-slim
COPY target/app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
注意事项
1. 文件名规范
- 建议使用小写字母和连字符
- 避免使用空格和特殊字符
- 保持名字简洁有意义
2. 部署脚本适配
如果你有自动化部署脚本,记得更新脚本中的文件名:
# 旧的脚本
java -jar my-springboot-app-1.0.0.jar# 新的脚本
java -jar spring-admin.jar
3. CI/CD流水线
在Jenkins、GitLab CI等流水线中,也要相应更新文件路径。
常见问题
Q1: finalName会影响项目的其他配置吗?
A: 不会。finalName只影响最终生成的文件名,不会影响项目的groupId、artifactId等Maven坐标。
Q2: 可以在不同的profile中使用不同的finalName吗?
A: 可以的!
<profiles><profile><id>dev</id><build><finalName>app-dev</finalName></build></profile><profile><id>prod</id><build><finalName>app-prod</finalName></build></profile>
</profiles>
Q3: 如果不想要版本号,但想保留原项目名怎么办?
A: 可以使用Maven属性:
<finalName>${project.artifactId}</finalName>
总结
通过使用Maven的<finalName>
配置,我们可以轻松地为SpringBoot项目的jar包自定义名称。这个小技巧虽然简单,但在实际项目中非常有用,能够:
- 简化部署流程 - 不用记住复杂的文件名
- 提高可读性 - 文件名更有意义
- 统一命名规范 - 团队协作更顺畅
- 便于自动化 - 脚本和CI/CD更容易维护
现在就去试试吧!给你的SpringBoot项目起一个好听的名字~
参考资料
- Maven官方文档 - Build Configuration
- Spring Boot官方文档 - Build Tool Plugins
💡 小提示:这个技巧不仅适用于SpringBoot项目,对于所有使用Maven构建的Java项目都有效!