2012-01-23 14 views
5

Używamy atrybutu manifest wtyczki java do pisania plików MANIFEST.MF do naszych artefaktów jar.Jak korzystać z Manifest API Gradle do wstawienia pliku `MANIFEST.MF` do katalogu głównego pliku zip

Używamy również gradle do budowania projektów GWT, a wyjście, które zdefiniowaliśmy dla tych projektów, to zip. Chciałbym dołączyć plik MANIFEST.MF w katalogu głównym tego pliku zip.

Próbowałem użyć zadania z , więc mogę użyć jego właściwości manifest, ale problem, oczywiście, jest to, że plik manifestu jest zapisany w META-INF/MANIFEST.MF, którego nie chcę. Powodem jest to, że rozpakowujemy archiwum do głównej aplikacji i potrzebuję mieć możliwość odniesienia się do pliku MANIFEST.MF w środowisku wykonawczym dla moich własnych niegodziwych celów.

Więc teraz archiwum wygląda następująco:

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

I muszę zajęło tak:

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

Ja już z powodzeniem zdobyć to wyglądać:

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

Poprzez definicję:

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

Metoda wygląda obiecująco, ale nie mogę znaleźć implementacji tego interfejsu, z którego mogę korzystać i staram się unikać pisania własnych.

Myśli?

+0

Zadanie 'Jar' ma funkcję' getManifest() ', która zwraca implementację' Manifest'. Sądzę więc, że powinieneś być w stanie zrobić 'pack (type: Jar) {manifest.writeTo (...)}'. – rodion

Odpowiedz

3

Patrząc na Jar task, nie wygląda na to, że lokalizacja pliku manifestu jest konfigurowalna.

Możesz użyć własnej implementacji gradle, aby utworzyć plik manifestu z from w pliku zip.

Można spróbować to:

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

Myślę, że jest dokładnie to, czego szukasz na koniec this chapter z podręcznika Gradle.

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

Próbowałem powyższego rozwiązania, ale nie działało, czy możesz dodać przykład –

Powiązane problemy