Как использовать API манифеста Gradle для вставки файла `MANIFEST.MF` в корень zip-файла - PullRequest
5 голосов
/ 23 января 2012

Мы используем атрибут manifest плагина java для записи MANIFEST.MF файлов в наши jar артефакты.

Мы также используем gradle для создания GWT проектов, и результат, который мы определили для этих проектов, - zip. Я хотел бы включить файл MANIFEST.MF в корень этого zip-файла.

Я пытался использовать задачу 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 выглядит многообещающе, за исключением того, что я не могу найти реализацию этого интерфейса, которую я могу использовать, и я стараюсь не писать свой собственный.

Мысли

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Глядя на задачу Jar , не похоже, что местоположение файла манифеста настраивается.

Вы можете использовать собственную реализацию DefaultManifest от gradle для создания манифеста, а затем включить этот файл с 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)
}
2 голосов
/ 24 января 2012

Я думаю, что это именно то, что вы ищете в конце этой главы из руководства Gradle.

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