如何使用 gradle 将时间戳附加到生成的 jar 中?

Posted

技术标签:

【中文标题】如何使用 gradle 将时间戳附加到生成的 jar 中?【英文标题】:How to append a timestamp to the generated jar using gradle? 【发布时间】:2019-01-03 02:34:57 【问题描述】:

在运行gradle build 命令时,如何在 jar 文件名中附加时间戳

我现在的 jar 名称:

abc-0.0.1-SNAPSHOT.jar

我真正想要的:

abc-0.0.1-SNAPSHOT20180721101136.jar

我的 build.gradle 文件:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.abc'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

我尝试过build.date = '$timestamp',但这不起作用。 我也试过doFirst,但没有成功。

【问题讨论】:

【参考方案1】:

您可以通过设置相应任务的archiveName 属性轻松地自己选择 JAR 文件的名称:

jar 
    archiveName = 'myJarFile.jar'

默认情况下,archiveName 将通过架构 [baseName]-[appendix]-[version]-[classifier].[extension] 组装,其中每个部分是相应任务的另一个属性。对于您的特定用例,我建议只更改名称的 version 部分:

jar 
    version = project.version + timestamp      // define timestamp in a way you like

您可能希望将此配置放入 doFirst 闭包中,因为时间戳会更精确地显示 JAR 文件的实际创建时间。

【讨论】:

时间戳是我需要定义的函数吗? 一个变量,你可以在设置新的version之前设置它。我不知道你想如何定义时间戳,你可以使用JDK中的任何方法:***.com/questions/23068676/… 我这样做:def timestamp = new Date().format('yyyyMMddHHmmss') jar version = '0.0.1-SNAPSHOT' archiveName = 'abc' + version + timestamp 但它不会将版本或时间戳附加到 jar 中 @user2340345 仅供参考,非常麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 内置的 java.time 类所取代8 及以后。见Tutorial by Oracle。 @user2340345 String dateTimePortion = OffsetDateTime.now( ZoneOffset.UTC ).truncatedTo( ChronoUnit.SECONDS ).format( DateTimeFormatter.ofPattern( "uuuuMMdd'T'HHmmss" ) ) ; 在中间包含T 以遵循用于交换日期时间值的流行标准ISO 8601 格式。并考虑你想用什么挂钟时间来捕捉当前时刻(时区,或与 UTC 的偏移量)——通常最好在 UTC 中工作。

以上是关于如何使用 gradle 将时间戳附加到生成的 jar 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期构建附加到 gradle 上的 versionNameSuffix

将日期/时间戳附加到现有文件

如何使用 cron 为日志输出条目添加时间戳?

如何将 gradle 生成的源文件夹添加到 Eclipse 项目?

Firestore 将具有服务器时间戳的对象附加到数组(字段类型)

使用 gradle 发布到 maven 时删除附加到工件名称的默认 date.time