2012-09-27 15 views
8

Implementé una aplicación web en el motor de la aplicación Google y mi servicio web usa el marco jersey 1.14. Cuando intento consumir o invocar los servicios web en GAE, obtengo una clase java.lang.IncompatibleClassChangeError: Implementing. Busqué alrededor y me di cuenta de que el jersey 1.14 depende de asm 3.1 y el motor de la aplicación google usa asm 4.0 y me di cuenta de que tenía que usar JarJar para empaquetar las dependencias para solucionar este problema, pero no tengo ni idea de cómo hacerlo con JarJar. El tutorial que encontré fue muy críptico y orientado a los programadores de experiencias. Así que alguien puede publicar un tutorial dirigido a un principiante o guiarme por los pasos para resolver este problema.utilizando la herramienta de reempaquetado de JarJar

Respuesta

0

Puede usar el comando jar de jdk para extraer y fusionar los archivos jar.
frasco -xvf firstjar.jar .... Se extraerá el tarro clases carpeta/paquete sabia -com/Pak1/Pak2
Ahora mismo extracto segundo frasco y fusionar las dos carpetas expandidas
No se puede crear una solo jar de archivos de clase fusionados.
jar -cvf mergedjar.jar [nombre de carpetas [ex com org ...]], para más detalles, compruebe cómo funcionan los comandos jar.

+0

Esto no ayudará, porque en el tiempo de ejecución las clases con el mismo nombre completamente calificado colisionarán. _Jarjar_ hace más que solo fusionar los frascos. Sin embargo, todavía tengo que entenderlo. – vadipp

9

Bueno, esta es una respuesta bastante tardía, pero si alguien cruza puede ser de ayuda. Tomaré un ejemplo y explicaré esto. jarjar se puede utilizar para volver a empaquetar las bibliotecas de Java. se puede usar para cambiar el espacio de nombres, por ejemplo, org.apache.common.codec necesita ser cambiado a some_random_name.org.apache.common.codec. Descargar jarjar de jarjar download site después pegar el archivo JAR que desea cambiar (myinjar.jar) y jarjar descargado en una carpeta y ejecutar este comando java -jar jarjar-1.4.jar process myrules.txt myinjar.jar myoutjar.jar en myrules.txt añadir estas líneas

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

la salida será myoutjar.jar guardado en la misma carpeta y puede usarlo en su proyecto sin ningún conflicto

+0

estoy obteniendo 'Error de sintaxis: entradas de jar duplicadas: META-INF/LICENSE.txt' –

+0

gikarasojo tal vez este [enlace] (http://stackoverflow.com/questions/31912459/duplicate-lib-file-copied-in-apk -meta-inf-license-txt-error-in-andorid-studio) puede ayudar –

+0

Tengo un caso complicado de alguna manera. Quiero usar algunas funcionalidades siempre que se proporcione una biblioteca 'm.jar' Esta biblioteca requiere que use una clase' BindingProvider' que se encuentra en el paquete 'javax' pero que no está en Android. así tuve que descargar otro tarro llamado 'android-ws-combine.jar'. cuando lo agregué en mi módulo e intenté ejecutarlo, recibí el error 'Error: problema para procesar" javax/xml/XMLConstants.class ":'. pensé que el reempaquetado 'android-ws-combine.jar' ayudaría pero mi otro jar' m.jar' también arroja algunos errores ya que no puede encontrar 'javax.BindingProvider' porque renombré el paquete' javax' cuando repa –

Cuestiones relacionadas