获取Gradle构建开始时间

7
如何在Gradle中获取代表构建过程开始时间的Date对象?
一些背景信息:
在我编写的插件中,我需要将构建的日期和时间存储在构建的归档文件中(主要用于在应用程序的标题栏中显示日期和构建号,以方便QA)。我希望多个正在构建的子项目具有相同的日期,因此理想情况下,我只想使用构建开始的时间。作为解决方法,我将日期保存在静态字段中,但这让我的眼睛受伤了。我已经在源代码中看到了多个org.gradle.util.Clock实例,它们保存了这样的信息,但我无法从插件中检索其中的一个。
3个回答

5

我使用以下代码成功获取了构建时间:

Clock clock = project.gradle.services.get(BuildRequestMetaData.class).buildTimeClock
Date startDate = new Date(clock.getStartTime())

然而,它远非理想,因为它使用Gradle内部API: getServices()方法定义在org.gradle.api.internal.GradleInternal接口中。


仍然适用于gradle 1.5。就我而言,在编写插件以针对特定软件版本时,依赖于内部是可以的...你只需要知道,将来可能需要更改代码以支持新版本。 - yan

5

您的插件可以在根项目上设置/获取动态属性:

def root = project.rootProject
if (!root.hasProperty("startTime")) {
    root.startTime = new Date()
}
// do whatever necessary with root.startTime

你说得对;我想要的是一些由Gradle初始化的日期,这样我的插件使用的时间戳就会与例如Maven发布任务使用的时间戳不同。经过一番搜索,结果发现在公共API中没有这样的方法,真是遗憾。 - Artur Nowak
请随意创建问题。然而,我不确定Maven发布任务是否使用Gradle初始化日期,甚至能否使用它(我们在这里调用Maven)。 - Peter Niederwieser

1

我无法使用上述方法完全实现OP(和我)想要的效果,因此我提出了这个build.gradle

import java.text.SimpleDateFormat
import java.util.Date

apply plugin: 'java'

def getCurrentTimestamp ()
{
  Date today = new Date ()
  SimpleDateFormat df = new SimpleDateFormat ("MM-dd-yyyy_hh-mm")
  return df.format (today)
}

task tar (type: Tar) {
  from 'src/'
  baseName 'sillyProject'
  classifier getCurrentTimestamp ()
  extension 'tar'
}

repositories {
  mavenCentral()
}

dependencies {
    // etc.

这将生成tar归档文件(即,当您运行$ gradle tar时)位于$projectDir/build/distributions/sillyProject-<currentTimestamp>.tar。希望这能对某些人有所帮助。

这段代码可以获取时间,但每次调用“getCurrentTimestamp”时返回的日期都会改变。当你使用以下代码时,情况会变得更加诡异: def myTime = getCurrentTimeStamp()因为每次引用“myTime”时,它都会有不同的时间:(只是提供信息;) - cs94njw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接