2012-01-23 14 views
5

Utilizamos el atributo manifest del complemento java para escribir los archivos MANIFEST.MF en nuestros artefactos jar.Cómo usar el API de Manifiesto de Gradle para insertar un archivo `MANIFEST.MF` en la raíz de un archivo zip

También usamos gradle para construir proyectos GWT y la salida que hemos definido para esos proyectos es zip. Me gustaría incluir un archivo MANIFEST.MF en la raíz de ese archivo zip.

He intentado utilizar una tarea de type: Jar para que pueda usar su propiedad manifest, pero el problema, por supuesto, es que el archivo de manifiesto está escrito en META-INF/MANIFEST.MF, que no quiero. La razón es que descomprimimos el archivo en la aplicación principal y necesito poder hacer referencia al archivo MANIFEST.MF en tiempo de ejecución para mis propios nefastos propósitos.

Así que en este momento el archivo tiene el siguiente aspecto:

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

Y necesito que tomó como esto:

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

Ya he recibido con éxito que se vea como:

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

A través de una definición como:

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

El método writeTo parece muy prometedor, excepto que no puedo encontrar una implementación de esa interfaz que pueda usar y estoy tratando de evitar escribir la mía.

¿Pensamientos?

+0

'Jar' task tiene' getManifest() 'que devuelve la implementación' Manifest'. Así que supongo que deberías poder hacer 'pack (type: Jar) {manifest.writeTo (...)}'. – rodion

Respuesta

3

Al mirar Jar task, no parece que la ubicación del archivo de manifiesto sea configurable.

Es posible que desee utilizar la implementación de gradle DefaultManifest para crear un manifiesto y luego incluir este archivo con from en su archivo comprimido.

Puede probar esto:

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

Creo que es exactamente lo que busca al final de this chapter del manual de Gradle.

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

He intentado con la solución anterior, pero no funcionó, ¿podría agregar algún ejemplo? –

Cuestiones relacionadas