2013-07-25 13 views
6

Vorrei raggruppare alcuni file jar creati con Gradle 1.6 come parte di un'applicazione webstart Java.Aggiunta di attributi al manifest di un file jar utilizzando Gradle

posso attualmente firmare i vasetti correttamente con un certificato e specificare gli attributi codebase e permissions per i manufatti realizzati utilizzando l'attività barattolo di serie in questo modo:

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

Questo perché l'ultima versione Java Web Start in Il JDK/JRE di Oracle rende obbligatori questi attributi o si lamenta per l'utente della sicurezza dell'applicazione.

Preventing RIAs from Being Repurposed

Tuttavia, i miei vasi artefatto avere dipendenze di terze parti (ad esempio, slf4j) e devo ancora trovare un modo intuitivo per includere questi atributes in tali barattoli di terze parti. Con questo in mente, la mia struttura dell'applicazione webstart finale sembra un po 'come questo:

./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 

Il risultato è che in fase di esecuzione, webstart non si lamenta dei miei artefatti ma lo fa per la terza vasi parti, perché, ovviamente, don 't hanno gli attributi nella loro file manifesto:

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 

Dal momento che non controllano direttamente la generazione manifesta per il terzo vasetti di partito devo modificare in qualche modo i file manifesto presenti all'interno della directory build/webstart/lib per includere esplicitamente tali attributi per rendere felice la webstart.

C'è un modo per aggiungere attributi al manifest di un file jar con Gradle? Nel caso in cui qualcuno è interessato, questo è il mio script Gradle costruire:

build.gradle

Grazie per il vostro tempo e aiuto!

UPDATE

risposta di Pietro ha funzionato! Questo è il codice aggiornato:

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' 
) 

Grazie!

risposta

4

Per impostare questi attributi, è necessario decomprimere i vasi, modificare i manifesti (utilizzando Groovy) e reimballare i vasi. In alternativa, è possibile provare a sovrascrivere i manifest con ant.jar(update = true), sebbene la sovrascrittura di un file (senza aggiungere un duplicato) non sembra essere supportata (vedere attributo duplicate nello Ant docs). Unire i barattoli (in un modo o nell'altro) potrebbe essere un'altra opzione.