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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:48