2016-05-13 23 views
1

我正在使用Gradle 2.12。在我的构建文件中,我配置每个模块应该在清单中放置额外的信息。我这样做:仅当清单更改时阻止执行jar任务

tasks.withType(Jar) { 
    manifest { 
     attributes(
       'Build-By': buildBy, 
       'Build-JDK': buildJdk, 
       'Build-Time-ISO-8601': buildTime_ISO_8601, 
       'Build-SCM-Info': buildScmInfo 
     ) 
    } 

变量在构建开始时初始化一次。

这工作正常,有一个缺点:它会导致jar任务总是被调用,因为它发现它的'输入'已更改,并且所有依赖于jar-ed的模块都会重新编译,这是不必要的。例如,对于项目结构:

A,B依赖于A,C依赖于A

当第二时间没有任何更改代码被执行的生成时,A不是编译,而是一种新的罐是因为这个原因,B和C需要重新编译,因为它们的依赖性发生了变化。

这怎么解决?

回答

1

您可以尝试将清单规范移出配置阶段(通过在doFirst闭包中声明它),以使Gradle查找默认清单文件中的更改,该清单文件中没有任何更改。类似这样的:

tasks.withType(Jar) { 
    doFirst { 
    manifest { 
     attributes \ 
     'Build-By': buildBy, 
     'Build-JDK': buildJdk, 
     'Build-Time-ISO-8601': buildTime_ISO_8601, 
     'Build-SCM-Info': buildScmInfo 
    } 
    } 
} 

在这种情况下,只有在执行jar任务时才应该更改Manifest内容。

+0

太简单了,谢谢。 – wujek