我们使用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")