2011-10-28 11 views
7

Recientemente actualicé el SDK de Android en la máquina Jenkins a rev15 desde rev13, y tuve que rehacer algunas de nuestras funciones de compilación personalizadas en build.xml para que encajen con los cambios realizados en rev14. Lo resolví en mi estación de trabajo y lo revisé esperando que todo fuera color de rosa. En cambio, la generación falla con el siguiente error:¿Cómo soluciono esta ZipException al compilar un proyecto de Android en Jenkins?

-obfuscate: 

-dex: 
     [dex] Converting compiled files and external libraries into /export/home/hudson/jobs/path/to/the/file/classes.dex... 
     [dx] 
     [dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
     [dx] java.util.zip.ZipException: error in opening zip file 
     [dx]  at java.util.zip.ZipFile.open(Native Method)  
     [dx]  at java.util.zip.ZipFile.<init>(ZipFile.java:127) 
     [dx]  at java.util.zip.ZipFile.<init>(ZipFile.java:143) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:206) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
     [dx]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
     [dx]  at com.android.dx.command.dexer.Main.processOne(Main.java:418) 
     [dx]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) 
     [dx]  at com.android.dx.command.dexer.Main.run(Main.java:206) 
     [dx]  at com.android.dx.command.dexer.Main.main(Main.java:174) 
     [dx]  at com.android.dx.command.Main.main(Main.java:95) 
     [dx] 1 error; aborting 

BUILD FAILED 
/opt/android-sdk-linux/tools/ant/build.xml:729: The following error occurred while executing this line: 
/opt/android-sdk-linux/tools/ant/build.xml:731: The following error occurred while executing this line: 
/opt/android-sdk-linux/tools/ant/build.xml:743: The following error occurred while executing this line: 
/opt/android-sdk-linux/tools/ant/build.xml:249: null returned: 1 

puedo construir con éxito el proyecto mediante la ejecución de ant como el usuario Jenkins directamente en el directorio de espacio de trabajo de Jenkins con el mismo SDK de Android, Hormiga, y JDK que Jenkins está utilizando . Incluso corté y pegué la línea de ejecución del registro de Jenkins para asegurarme de que todos los mandos e interruptores estén configurados de la misma manera. Entonces, es algo sobre cómo Jenkins está ejecutando la compilación, ese es el problema.

Tenía a Jenkins volcado el entorno como un "ejecutor de shell" paso de la compilación, y veo que la variable LD_LIBRARY_PATH está configurada.

LD_LIBRARY_PATH=/u0/jdk1.6.0_29/jre/lib/i386/server:/u0/jdk1.6.0_29/jre/lib/i386:/u0/jdk1.6.0_29/jre/../lib/i386 

que establece este valor en mi terminal mientras se ejecuta la construcción de la concha, y se produce un error en la misma forma que cuando se ejecuta Jenkins cosas. Ah-ha!

El problema es que no puedo encontrar la forma de evitar que la variable LD_LIBRARY_PATH se establezca o señalar algo que no cause este problema. No está establecido en el entorno del usuario de Jenkins, y no puedo encontrar nada que pueda ser una referencia en la configuración de Jenkins. El valor que estableció cambió cuando instalé un JDK actualizado y actualicé el valor JAVA en /etc/defaults/jenkins, por lo que está claramente relacionado, pero desafortunadamente, el comportamiento no mejoró ninguno.

Estoy sin ideas. ¿Alguna ayuda?

Respuesta

1

El problema fue que debido a algunas trampas de configuración implicadas en el uso de la función de compilación de matriz de Jenkins (una característica muy buena, por cierto) que una biblioteca no estaba poniendo su archivo classes.jar donde estaba el proyecto principal esperando encontrarlo, causando el error informado. Eso fue básicamente un "archivo no encontrado" que no lo dice. Todavía no estamos seguros de qué (si es que algo?) Tuvo que ver con el LD_LIBRARY_PATH.

Mi colega modificó el archivo build.xml para el proyecto principal y la biblioteca para acordar más enérgicamente dónde van a terminar los archivos de salida, y ahora todo vuelve a funcionar, para nuestro alivio.

0

Tuve el mismo problema. Estaba construyendo sobre Jenkins y jar estaba siendo copiado incorrectamente en libs.

Estoy usando el complemento Jenkins Copy Artifacts para tomar un archivo jar común de la biblioteca y copiarlo en libs /. Recibí el error cuando no usé la opción "Acoplar directorios". Una vez que tuve el jar en el directorio libs, todo volvió a la normalidad.

¡Espero que esto le ahorre a alguien el dolor de cabeza!

+0

Definitivamente parece estar relacionado con archivos jar extraviados. – Argyle

Cuestiones relacionadas