2013-07-25 16 views
6

Chciałbym połączyć kilka plików jar zbudowanych za pomocą programu Gradle 1.6 w ramach aplikacji Java WebStart.Dodawanie atrybutów do pliku manifestu pliku jar przy użyciu Gradle

mogę tego podpisać słoiki poprawnie z certyfikatem i określić codebase i permissions atrybuty dla wytwarzanych przedmiotów za pomocą standardowego zadanie słoik tak:

jar { 
    manifest.attributes provider: 'tribe7.net' 
    manifest.attributes permissions: 'all-permissions' 
    manifest.attributes codebase: '*' 
} 

To dlatego, że najnowsza wersja webstart Java w JDK/JRE firmy Oracle powoduje, że atrybuty te są obowiązkowe, lub wnosi skargę do użytkownika na temat zabezpieczeń aplikacji.

Preventing RIAs from Being Repurposed

Jednak moje słoiki artefakt ma zależności innych firm (na przykład slf4j) i muszę jeszcze znaleźć intuicyjny sposób włączenia tych ATUTY w takich słoików osób trzecich. Mając to na uwadze, moja ostateczna struktura aplikacji webstart wygląda jakby tak:

./build/webstart/my.jnlp 
./build/webstart/lib/myartifactA-1.00.jar 
./build/webstart/lib/myartifactB-1.00.jar 
./build/webstart/lib/myartifactC-1.00.jar 
./build/webstart/lib/slf4j-api-1.7.5.jar 

Powoduje to, że w czasie wykonywania, webstart nie narzekać moich artefaktów ale robi to dla słoików osób trzecich, ponieważ oczywiście don „t mieć atrybuty w pliku manifestu:

Missing Codebase manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar 
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar 
Missing Codebase manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar 
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar 

Ponieważ nie bezpośrednio kontrolować manifestu pokolenia do słoików zewnętrznych muszę jakoś zmodyfikować pliki manifestu obecne wewnątrz katalogu build/webstart/lib wyraźnie włączyć te atrybuty w celu uszczęśliwienia strony internetowej.

Czy istnieje sposób dodawania atrybutów do pliku manifestu pliku jar za pomocą Gradle? W przypadku, gdy ktoś jest zainteresowany, to moja Gradle zbudować skrypt:

build.gradle

Dzięki za poświęcony czas i pomoc!

UPDATE

odpowiedź Piotra pracował! To jest zaktualizowany kod:

ant.jar(destfile: it, update: true) { 
    delegate.manifest { 
    attribute(name: 'permissions', value: 'all-permissions') 
    attribute(name: 'codebase', value: '*') 
    } 
} 

ant.signjar(
    destDir: webstartSignedLibPath, 
    alias: project.getProperty('jarsign.keystore.alias'), 
    jar: it, 
    keystore: project.getProperty('jarsign.keystore.path'), 
    storepass: project.getProperty('jarsign.keystore.password'), 
    preservelastmodified: 'true' 
) 

Dzięki!

Odpowiedz

4

Aby ustawić te atrybuty, będziesz musiał rozpakować słoiki, edytować manifesty (używając Groovy) i przepakować słoiki. Alternatywnie możesz spróbować zastąpić manifesty za pomocą ant.jar(update = true), chociaż nadpisanie pliku (bez dodawania duplikatu) nie wydaje się być obsługiwane (patrz duplicate atrybut w Ant docs). Scalanie słoików (w taki czy inny sposób) może być inną opcją.

Powiązane problemy