执行任务时如何将变量写入gradle属性文件?

时间:2019-04-12 11:05:34

标签: java gradle

我有这样的情况。我需要用gradle在每次发布构建后保存当前日期。是否有可能将日期保存到gradle.properties文件中,以便我在下一个构建作业中可以读取它?

我的文件: gradle.properties:

version=0.0.1
date=

build.gradle:

task changeDate() {
    file = new File("changelogs/CHANGELOG_RELEASE_FROM_"+getDate()+".md");
    project.setProperty("date",getDate());
}

它可以正常工作,并且不会将日期变量保存到gradle.properties中。

所以我希望我可以在gradle.properties文件中有一个发布日期:

gradle.properties:

version=0.0.1
date=12.04.2019

2 个答案:

答案 0 :(得分:1)

您可以尝试执行以下操作:

php artisan tinker

假设import java.time.*; task rel { doLast { ant.propertyfile(file: "gradle.properties") { entry( key: "date", value: LocalDateTime.now()) } } } 是您的rel任务或执行发布的所有其他任务,即执行。您必须在其配置中添加release闭包以在任务执行后运行一些代码。在此关闭中,您将修改属性文件中的某些属性。

doLast及其导入仅作为示例,您可以使用另一种方法来获取当前日期。

在您的情况下,它看起来像:

LocalDateTime

但是,如果没有执行,则必须以某种方式执行task changeDate() { doLast { ant.propertyfile(file: "gradle.properties") { entry( key: "date", value: LocalDateTime.now()) } } }

答案 1 :(得分:1)

方法getPropertyfindPropertysetPropertygradle.properties文件没有直接关系。相反,它们提供对build.gradle所针对的Project实例范围内的属性的访问。此范围包括许多不同的属性,其中包括所谓的 extra properties (来自gradle.properties文件)。

但是,Gradle为此功能提供了一个名为WriteProperties的任务类型。只需指定目标文件并定义一些属性即可:

task changeDate(type: WriteProperties) {
    outputFile = file('gradle.properties')
    property 'date', getDate()
}