主题几乎都在问这个问题,但更详细的说明,我在build.gradle
中有以下内容:
jar {
manifest {
attributes("Built-By": "Gradle")
attributes("Build-Version": version)
attributes("Main-Class": "somePackage.SomeClass")
}
}
构建时,由于清单是自动生成的,因此它始终认为jar
任务已过期,即使代码中没有任何更改。
理想情况,我希望能够检查版本是否与上一次构建相同。如果是,并且以前的任务依赖(compileJava
等)都是UP-TO-DATE
,我也希望jar任务报告UP-TO-DATE
。
如果不这样做,如果我能让jar任务完全忽略清单文件,我会非常高兴。
对于单个jar任务,这不是什么大问题,但只要一个jar报告它不是UP-TO-DATE
,那么所有依赖它的任务就必须重新开始-compile,re-jar等等,这使得构建比实际需要的时间更长。并且由于我的依赖路径中的第一个jar任务报告由于明显问题它不是最新的,这意味着整个事情被迫重新编译/重新jar /重新战争/重新每隔一次耳朵/等等,我们在这里谈论几十万行代码。
无论如何,如果有人知道如何解决这个小烦恼,我会感激不尽
修改
我还有一个依赖于jar任务的zip任务:
task zip(type:Zip, dependsOn:jar) {
from jar
include jar.archiveName
from '.'
include 'run.bat'
}
运行此命令:
gradlew :myProject:zip -Pversion=1.0
我每次都会得到以下输出,即使我连续两次运行它而没有任何变化:
:myProject:compileJava UP-TO-DATE
:myProject:processResources UP-TO-DATE
:myProject:classes UP-TO-DATE
:myProject:jar
:myProject:zip
答案 0 :(得分:3)
鉴于上述声明,并假设代码未更改,jar
任务应该只有在version
发生更改时才会过时。 (使用--info
运行将告诉您哪些文件已更改。)最佳解决方案是防止这种情况,至少在开发时。 (例如,不要将version
设置为new Date()
。)
另请注意,过时的不是级联。只有当的输入或输出发生变化时,才会重新运行下游任务。他们不关心上游任务是否是最新的。