我们使用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
方法看起来很有希望,除了我找不到我可以使用的那个接口的实现,我试图避免编写自己的。
思想?
答案 0 :(得分:3)
查看Jar task,看起来清单文件的位置不可配置。
您可能希望使用gradle自己的DefaultManifest实现来创建清单,然后在zip文件中包含此文件from
。
你可以试试这个:
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)
}
答案 1 :(得分:2)
我认为在Gradle手册的this chapter末尾正是您正在寻找的内容。
jar.manifest.writeTo("$buildDir/mymanifest.mf")