Gradle 防止仅在清单更改时执行jar任务
我用的是Gradle2.12。在我的构建文件中,我配置每个模块应该在清单中放置额外的信息。我是这样做的:Gradle 防止仅在清单更改时执行jar任务,gradle,Gradle,我用的是Gradle2.12。在我的构建文件中,我配置每个模块应该在清单中放置额外的信息。我是这样做的: tasks.withType(Jar) { manifest { attributes( 'Build-By': buildBy, 'Build-JDK': buildJdk, 'Build-Time-ISO-8601': buildTime_ISO_8601,
tasks.withType(Jar) {
manifest {
attributes(
'Build-By': buildBy,
'Build-JDK': buildJdk,
'Build-Time-ISO-8601': buildTime_ISO_8601,
'Build-SCM-Info': buildScmInfo
)
}
tasks.withType(Jar) {
doFirst {
manifest {
attributes \
'Build-By': buildBy,
'Build-JDK': buildJdk,
'Build-Time-ISO-8601': buildTime_ISO_8601,
'Build-SCM-Info': buildScmInfo
}
}
}
变量在构建开始时初始化一次
这很好,但有一个缺点:它会导致jar任务始终被调用,因为它发现其“输入”已更改,并且依赖于jar的所有模块都被重新编译,这是不必要的。例如,对于项目结构:
A、 B取决于A,C取决于A
当第二次执行构建时,没有任何代码更改,不会编译A,但会生成一个新的jar,因此,B和C需要在其依赖关系更改时重新编译
如何解决这一问题?您可以尝试将清单规范移出配置阶段(通过在
doFirst
闭包中声明),以便在默认清单文件中查找更改,该文件尚未更改。像这样的事情:
tasks.withType(Jar) {
manifest {
attributes(
'Build-By': buildBy,
'Build-JDK': buildJdk,
'Build-Time-ISO-8601': buildTime_ISO_8601,
'Build-SCM-Info': buildScmInfo
)
}
tasks.withType(Jar) {
doFirst {
manifest {
attributes \
'Build-By': buildBy,
'Build-JDK': buildJdk,
'Build-Time-ISO-8601': buildTime_ISO_8601,
'Build-SCM-Info': buildScmInfo
}
}
}
在这种情况下,只有在执行jar任务时才应该更改清单内容