如何找出Gradle上次缓存依赖项的时间

时间:2012-08-21 18:01:57

标签: gradle

在我的Gradle脚本中,我将JavaCC声明为自己的自定义“javacc”配置中的依赖项。然后我使用该配置找出JavaCC JAR的路径,并将该路径写入属性文件,该文件稍后由Gradle外部的Ant使用。

目前,我的build.gradle文件的相关部分如下所示:

configurations {
    javacc
}

repositories {
    mavenCentral()
}

dependencies {
    javacc group: 'net.java.dev.javacc', name: 'javacc', version: '5.0'
}

task cleanBuildHelpers(type: Delete) {
    delete '.buildHelpers/ant.properties'
}

task prepareBuildHelpers(dependsOn: cleanBuildHelpers) << {
    ant.propertyfile(file: '.buildHelpers/ant.properties') {
        entry(key: 'javacc_jar', value: configurations.javacc.files.iterator().next())
    }
}

这就像我想要的那样,我可以这样做。但是,每当我运行依赖于它的其他任务时,始终会执行prepareBuildHelpers任务。这不是什么大问题,但我想知道是否有办法让它在Gradle更新JavaCC JAR时运行。

我正在考虑检查JAR的时间戳并将其与属性文件的时间戳进行比较,但我不知道这是否是正确的方法以及是否有更好,更优雅的方法此

任何想法或建议?

1 个答案:

答案 0 :(得分:2)

正确的解决方案是声明prepareBuildHelpers任务的输入和输出。假设您希望在Jar文件的路径名(而不是其内容)发生更改时重新运行该任务:

task prepareBuildHelpers(dependsOn: cleanBuildHelpers) {
    inputs.property "javaccJarPath", configurations.javacc.singleFile
    outputs.file '.buildHelpers/ant.properties'
    doLast {
        ant.propertyfile(file: '.buildHelpers/ant.properties') {
            entry(key: 'javacc_jar', value: configurations.javacc.singleFile
        }
    }
}

由于任务编辑现有文件,因此输出声明不太准确,并且在对该文件进行任何外部更改后将重新运行该任务。如果这是不受欢迎的,请尝试使用outputs.upToDateWhen { true }

PS:注意引用文件集中单个文件的简化方法。