gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:02:42 25 4
gpt4 key购买 nike

在我的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的时间戳并将其与属性文件的时间戳进行比较,但是我不知道这是否正确,以及是否有更好,更优雅的方法。

有什么想法或建议吗?

最佳答案

正确的解决方案是声明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:请注意在文件集合中引用单个文件的简化方法。

关于gradle - 如何找出Gradle上次缓存依赖项的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com