Gradle Incremental Builds - 可以忽略最新检查中的清单?

Sto*_*wke 5 java jar gradle build.gradle

主题几乎问了这个问题,但是对于更多细节,我在以下内容中有以下内容build.gradle:

jar {
    manifest {
        attributes("Built-By": "Gradle")
        attributes("Build-Version": version)
        attributes("Main-Class": "somePackage.SomeClass")
    }
}
Run Code Online (Sandbox Code Playgroud)

构建时,由于清单是自动生成的,因此jar即使代码中没有任何更改,它也始终认为任务已过期.

理想情况下,我希望能够检查版本是否与上一次构建相同.如果是,如果以前的任务依赖(compileJava等)都是UP-TO-DATE,我也希望jar任务报告UP-TO-DATE.

如果失败了,如果我能让jar任务完全忽略清单文件,我会很高兴.

对于一个单独的jar任务来说,这不是什么大问题,但是只要一个jar报告它不是UP-TO-DATE,所有依赖它的任务就必须重新编译,重新jar等等,这使得构建需要比他们实际需要的方式更长的时间.并且由于我的依赖路径中的第一个jar任务报告它由于明显问题而不是最新的,这意味着整个事情被迫重新编译/重新jar /重新战争/重新/等等每一个-single-time,我们在这里谈论几十万行代码.

无论如何,如果有人知道如何解决这个小烦恼,我将不胜感激

编辑

我还有一个依赖于jar任务的zip任务:

task zip(type:Zip, dependsOn:jar) {
    from jar
    include jar.archiveName
    from '.'
    include 'run.bat'
}
Run Code Online (Sandbox Code Playgroud)

运行此命令:

gradlew :myProject:zip -Pversion=1.0
Run Code Online (Sandbox Code Playgroud)

我每次都会得到以下输出,即使我连续两次运行它而没有任何变化:

:myProject:compileJava UP-TO-DATE
:myProject:processResources UP-TO-DATE
:myProject:classes UP-TO-DATE
:myProject:jar
:myProject:zip
Run Code Online (Sandbox Code Playgroud)

Pet*_*ser 3

鉴于上述声明,并假设代码未更改,则jar任务仅在发生更改时才应过时version。(运行 with--info会告诉您哪些文件已更改。)最好的解决方案是防止这种情况发生,至少在开发时如此。(例如,不要设置versionnew Date()。)

另请注意,过时的不会级联。仅当下游任务的输入或输出发生更改时,才会重新运行。他们不关心上游任务是否是最新的。