我有一个多项目Gradle构建脚本,可以在Windows 10上成功运行。它读取并更新远离项目管理目录的Version.properties文件。所有的文件操作都是使用Gradle/groovy完成的。在版本文件被读取、递增和重写之后,它被复制到一个build/classes目录中,在那里它将被后续的jar和shadowjar任务拾取。< br >如果我按如下方式调用gradle,一切都会正常工作:
gradle build shadowjar ... etc.
但是,如果我在构建之前调用clean任务,则文件将被正确读取并递增,但文件副本会自动失败。
使用的命令是:
gradle clean build shadowjar
我的怀疑是,gradle在开始构建任务之前并没有等待清理任务完成。文件被读取并递增,但同时,多项目清理活动尚未完成。我已经尝试了依赖项{}块、doFirst{}和doLast{}的变体,以尝试在构建过程中进一步推送文件副本。我的主要要求是有版本。属性文件在jar或shadowjar任务执行之前到位。我怀疑尝试写入gradle的构建/目录,因为在gradle执行其活动时,可能无法将任何内容放入构建目录中。是否有任何方法确保版本。属性文件(或任何生成的文件)是否被复制?或者,我可以使用另一个位置,它不会在干净的时候被gradle吹走,但仍然可以在build:jar/build:shadowjar中找到?
您不应该在 99.99% 的情况下调用 gradle clean,由于 gradle 的增量构建功能,它是多余的。因此,只要您正确定义任务输入和输出,并在每个任务中从头开始,问题就会自行解决。
无论如何,在你的情况下,错误的顺序可能是由清理和其他任务之间的依赖性引起的,有吗?
我已经找到了一种方法来写出一个生成的Version.properties文件,该文件将被jar和shadowjar任务获取。使用gradle copy任务,并将修订后的Version.properties文件放入resources目录中。构建活动包括在资源/后续任务(jar、shadowjar、test等)中找到的文件。)我的怀疑是,因为clean吹走了构建目录,所以gradle在开始构建时假定活动已经完全完成。我想我已经证明了事实并非如此。doFirst{}、doLast{}和dependencies{}似乎不能作为清理构建的修饰符。