2012-09-27 8 views
8

Ho distribuito un'applicazione Web al motore dell'app Google e il mio servizio Web utilizza il framework jersey 1.14. Quando provo a utilizzare o invocare i servizi Web su GAE, viene visualizzato java.lang.IncompatibleClassChangeError: Implementing class. Ho cercato in giro e ho capito che la maglia 1.14 dipende da asm 3.1 e google app engine usa asm 4.0 e mi rendo conto che ho dovuto usare JarJar per pacchettizzare le dipendenze per risolvere questo problema ma non ho idea di come fare questo con JarJar. Il tutorial che ho trovato è stato molto criptico e orientato verso i programmatori di esperienza. Qualcuno può pubblicare un tutorial orientato verso un principiante o guidarmi attraverso i passaggi per risolvere questo problema.utilizzando lo strumento di riconfezionamento JarJar

risposta

0

È possibile utilizzare il comando jar di jdk per estrarre e unire i file jar.
jar -xvf firstjar.jar .... Sarà estrarre il barattolo classi cartella/pacchetto saggio -COM/PAK1/Pak2
Ora stesso estratto secondo vaso e unire le due cartelle espansi
Non è possibile creare un singolo jar di file di classe uniti.
jar -cvf mergedjar.jar [nome cartella [ex com org ...]], per i dettagli controllare come funzionano i comandi jar.

+0

Questo non è d'aiuto, perché in runtime le classi con lo stesso nome completo si scontreranno. _Jarjar_ fa molto più che unire i barattoli. Devo ancora capirlo da solo, però. – vadipp

9

Bene, questa è una risposta piuttosto tardiva, ma se qualcuno dovesse incrociare potrebbe essere d'aiuto. Prenderò un esempio e lo spiegherò. jarjar può essere utilizzato per riconfezionare librerie java. può essere usato per cambiare lo spazio dei nomi, ad esempio org.apache.common.codec deve essere cambiato in some_random_name.org.apache.common.codec. Scarica jarjar da jarjar download site poi incollare il file jar che si desidera modificare (myinjar.jar) e jarjar scaricato in una cartella ed eseguire il comando java -jar jarjar-1.4.jar process myrules.txt myinjar.jar myoutjar.jar in myrules.txt aggiungere queste righe

rule org.apache.commons.codec.** [email protected] 

il myoutjar.jar uscita sarà salvato nella stessa cartella e puoi utilizzarlo nel tuo progetto senza conflitti

+0

sto ricevendo 'Errore di sintassi: voci jar duplicate: META-INF/LICENSE.txt' –

+0

gikarasojo forse questo [collegamento] (http://stackoverflow.com/questions/31912459/duplicate-lib-file-copied-in-apk -meta-inf-license-txt-error-in-andorid-studio) può aiutare –

+0

Ho un caso in qualche modo complicato. Voglio usare alcune funzionalità fornite una libreria 'm.jar' questa libreria richiede che io usi una classe' BindingProvider' che si trova nel pacchetto 'javax' ma non è in Android. quindi ho dovuto scaricare un altro jar chiamato 'android-ws-combine.jar'. quando l'ho aggiunto nel mio modulo e ho cercato di eseguirlo, ho ricevuto l'errore 'Errore: problema nell'elaborazione di" javax/xml/XMLConstants.class ":'. ho pensato che il riconfezionamento 'android-ws-combine.jar' sarebbe stato d'aiuto, ma anche il mio altro jar' m.jar' genera degli errori dato che non riesce a trovare 'javax.BindingProvider' perché ho rinominato il pacchetto' javax' quando repa –

Problemi correlati