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