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)
鉴于上述声明,并假设代码未更改,则jar任务仅在发生更改时才应过时version。(运行 with--info会告诉您哪些文件已更改。)最好的解决方案是防止这种情况发生,至少在开发时如此。(例如,不要设置version为new Date()。)
另请注意,过时的不会级联。仅当下游任务的输入或输出发生更改时,才会重新运行。他们不关心上游任务是否是最新的。
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |