如何在Gradle中生成带版本号的Java Jar包?
嘿,这个需求在日常开发里太常见了,我给你整理了几种Gradle配置方案,轻松生成带版本号的Jar包:
1. 基础Groovy DSL配置
如果你的项目用的是Groovy语法的build.gradle,可以这样配置:
首先定义项目版本,然后修改jar任务的归档名称:
// 直接定义项目版本,也可以后续换成从外部文件读取 version = '1.0.0' jar { // 生成的Jar包名称格式为「项目名-版本号.jar」,比如my-service-1.0.0.jar archiveFileName = "${project.name}-${project.version}.jar" // 可选:自定义Jar包输出目录,默认是build/libs destinationDirectory = file("$buildDir/release-jars") }
2. Kotlin DSL配置(适用于build.gradle.kts)
如果你的项目用的是Kotlin语法的Gradle脚本,配置逻辑类似,语法稍有不同:
// 定义项目版本 version = "1.0.0" tasks.jar { // 设置Jar文件名 archiveFileName.set("${project.name}-${project.version}.jar") // 可选:自定义输出目录 destinationDirectory.set(file("$buildDir/release-jars")) }
3. 从外部属性文件读取版本(更灵活)
如果不想把版本号硬编码在构建脚本里,可以把版本放在gradle.properties文件中:
在项目根目录的gradle.properties添加:
appVersion=1.0.0-SNAPSHOT
然后在构建脚本里引用:
- Groovy DSL:
version = appVersion jar { archiveFileName = "${project.name}-${version}.jar" }
- Kotlin DSL:
version = properties["appVersion"] as String tasks.jar { archiveFileName.set("${project.name}-${version}.jar") }
额外优化:给Jar包清单文件添加版本信息
除了文件名带版本号,还可以把版本信息写入Jar包内部的MANIFEST.MF文件,更符合规范:
- Groovy DSL:
jar { archiveFileName = "${project.name}-${project.version}.jar" manifest { attributes( 'Implementation-Title': project.name, 'Implementation-Version': project.version ) } }
- Kotlin DSL:
tasks.jar { archiveFileName.set("${project.name}-${project.version}.jar") manifest { attributes( "Implementation-Title" to project.name, "Implementation-Version" to project.version ) } }
配置完成后,执行命令./gradlew jar(Windows系统用gradlew.bat jar),带版本号的Jar包就会生成在你指定的目录里啦!
内容的提问来源于stack exchange,提问作者ArockiaRaj
相关产品推荐
相关产品推荐

