如何在Gradle中获取表示构建过程开始时间的Date
对象?
在我正在编写的插件中,我需要在构建的存档中存储构建的日期和时间(它主要用于在应用程序的标题栏中显示日期和内部版本号,以使QA生活更轻松)。
我希望为正在构建的多个子项目保留相同的日期,所以理想情况下我只想使用构建的开始。作为一种解决方法,我将日期保存在静态字段中,但它会伤害我的眼睛。我在源代码中看到有多个org.gradle.util.Clock
实例包含这些信息,但我找不到从插件中检索一个的方法。
答案 0 :(得分:4)
您的插件可以在根项目上设置/获取动态属性:
def root = project.rootProject
if (!root.hasProperty("startTime")) {
root.startTime = new Date()
}
// do whatever necessary with root.startTime
答案 1 :(得分:3)
我已设法使用以下代码检索构建时钟:
Clock clock = project.gradle.services.get(BuildRequestMetaData.class).buildTimeClock
Date startDate = new Date(clock.getStartTime())
尽管如此,它还远非理想,因为它使用了Gradle内部API:getServices()
接口定义了org.gradle.api.internal.GradleInternal
方法。
答案 2 :(得分: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.
这会在$ gradle tar
下生成tar存档(即,当您运行$projectDir/build/distributions/sillyProject-<currentTimestamp>.tar
时)。希望这有助于某人。