22.14.1.Manifest

每个 jar 或 war 对象有一个 manifest 属性做为Manifest单独的实例,
当生成存档, 一个对应MANIFEST.MF文件被写入到档案中.

例22.15.MANIFEST.MF的定​​制
build.gradle

  1. jar {
  2. manifest {
  3. attributes("Implementation-Title": "Gradle",
  4. "Implementation-Version": version)
  5. }
  6. }

你可以创建一个 manifest 的独立实例.
您可以使用如共享 jar 之间的 manifest 的信息.

例22.16.创建一个manifest对象
build.gradle

  1. ext.sharedManifest = manifest {
  2. attributes("Implementation-Title": "Gradle",
  3. "Implementation-Version": version)
  4. }
  5. task fooJar(type: Jar) {
  6. manifest = project.manifest {
  7. from sharedManifest
  8. }
  9. }

您可以合并其他 manifest 到任何 Manifest 对象. 其它清单可能是通过文件路径描述或着像上所述, 引用另一个Manifest对象.

例22.17.独立的MANIFEST.MF一个特定的归档
build.gradle

  1. task barJar(type: Jar) {
  2. manifest {
  3. attributes key1: 'value1'
  4. from sharedManifest, 'src/config/basemanifest.txt'
  5. from('src/config/javabasemanifest.txt',
  6. 'src/config/libbasemanifest.txt') {
  7. eachEntry { details ->
  8. if (details.baseValue != details.mergeValue) {
  9. details.value = baseValue
  10. }
  11. if (details.key == 'foo') {
  12. details.exclude()
  13. }
  14. }
  15. }
  16. }
  17. }

清单合并的顺序与声明语句的顺序相同,如果基本清单和合并的清单都为相同的密钥定义值,那么那么合并清单将会被合并,您可以通过添加在其中您可以使用一个ManifestMergeDetails实例为每个条目实体完全自定义的合并行为。声明不会立即被来自触发合并。这是延迟执行的,要么产生jar时,或要求写入effectiveManifest时.
你可以很容易地写一个清单到磁盘。
例22.17.独立的MANIFEST.MF一个特定的存档
build.gradle

  1. jar.manifest.writeTo("$buildDir/mymanifest.mf")