如何使用 Gradle 的清单 API 插入"清单"。MF' 文件到一个 zip 文件的根目录中



我们使用java插件的manifest属性将MANIFEST.MF文件写入jar工件。

我们还使用gradle来构建GWT项目,并且我们为这些项目定义的输出是zip。我想在zip文件的根目录中包含一个MANIFEST.MF文件。

我尝试过使用type: Jar的任务,这样我就可以使用它的manifest属性,但问题当然是清单文件被写入了META-INF/MANIFEST.MF,这是我不想要的。原因是我们将档案解压缩到主应用程序中,我需要能够在运行时引用MANIFEST.MF文件,以达到我自己的邪恶目的。

所以现在的档案是这样的:

/gwtdirectory/
/gwtdirectory/file1
/gwtdirectory/file2
/gwtdirectory/...
/gwtdirectory/filen

我需要这样做:

/gwtdirectory/
/gwtdirectory/MANIFEST.MF
/gwtdirectory/file1
/gwtdirectory/file2
/gwtdirectory/...
/gwtdirectory/filen

我已经成功地让它看起来像:

/gwtdirectory/
/gwtdirectory/META-INF/MANIFEST.MF
/gwtdirectory/file1
/gwtdirectory/file2
/gwtdirectory/...
/gwtdirectory/filen

通过这样的定义:

task pack(type: Jar){
  manifest {
    attributes(...)
  }
  extension = 'zip'
  from gwt.destinationDir
}

writeTo方法看起来非常有前景,只是我找不到可以使用的接口的实现,而且我正在努力避免编写自己的接口。

想法?

查看Jar任务,清单文件的位置似乎是不可配置的。

您可能希望使用gradle自己的DefaultManifest实现来创建清单,然后将此文件与from一起包含在zip文件中。

你可以试试这个:

import org.gradle.api.java.archives.internal.DefaultManifest
import org.gradle.api.internal.file.IdentityFileResolver
File manifestFile = file('build/myAwesomeManifest.mf')
task generateManifest << {
   manifest = new DefaultManifest(new IdentityFileResolver())
   // add some attributes
   manifest.attributes(["attr1":"value1", "attr2":"value2"])
   // write it to a file
   manifest.writeTo(manifestFile)
}

我认为这正是您在本章末尾从Gradle手册中寻找的内容。

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

相关内容

最新更新