2011-10-28 7 views
7

Ho aggiornato di recente l'SDK Android sulla macchina Jenkins su rev15 da rev13 e ho dovuto ripristinare alcune delle nostre cose di compilazione personalizzate in build.xml per adattarle alle modifiche apportate in rev14. Ho lavorato a questo sulla mia workstation, e l'ho controllato aspettandomi che tutto fosse peachy. Al contrario, la generazione non riesce con il seguente errore:Come posso risolvere questo ZipException durante la compilazione di un progetto Android su 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 

posso costruire con successo il progetto eseguendo ant come l'utente Jenkins direttamente nella directory di lavoro Jenkins con la stessa SDK di Android, Formica, e JDK che Jenkins sta usando . Ho persino tagliato e incollato la riga di esecuzione dal log di Jenkins per garantire che tutte le manopole e gli interruttori siano impostati allo stesso modo. Quindi è qualcosa su come Jenkins sta facendo funzionare la build che è il problema.

Ho avuto Jenkins eseguire il dump dell'ambiente come un passo "shell exec" della build, e vedo che la variabile LD_LIBRARY_PATH è impostata.

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 

ho impostato questo valore nel mio terminale durante l'esecuzione la build dal guscio, e fallisce nello stesso modo di quando Jenkins gestisce le cose. Ah-ah!

Il problema è che non riesco a capire come mantenere la variabile LD_LIBRARY_PATH da impostare o puntare a qualcosa che non causerà questo problema. Non è impostato nell'ambiente dell'utente Jenkins e non riesco a trovare nulla che possa essere un riferimento ad esso nella configurazione di Jenkins. Il valore impostato cambia quando ho installato un JDK aggiornato e aggiornato il valore JAVA in /etc/defaults/jenkins, quindi è chiaramente correlato, ma sfortunatamente, il comportamento non è migliorato.

Sono fuori di idee. Qualsiasi aiuto?

risposta

1

Il problema si è verificato a causa di alcuni accorgimenti di configurazione coinvolti nell'utilizzo della funzione di creazione matrice Jenkins (una caratteristica molto interessante, tra l'altro) che una libreria non stava mettendo il suo file classes.jar in cui il progetto principale era mi aspetto di trovarlo, causando l'errore segnalato. Era fondamentalmente un "file non trovato" che non lo dice. Non siamo ancora sicuri di cosa (se non altro?) Il LD_LIBRARY_PATH ha avuto a che fare con esso.

Il mio collega ha ottimizzato il file build.xml per il progetto principale e la libreria per concordare in modo più deciso dove andranno a finire i file di output, e ora tutto funziona di nuovo, con nostro grande sollievo.

0

Ho avuto lo stesso problema. Stavo costruendo su Jenkins e jar veniva copiato erroneamente nelle librerie.

Sto utilizzando il plug-in Artifacts Jenkins Copy per afferrare un contenitore di libreria comune e copiarlo in libs /. Ho ricevuto l'errore quando non ho usato l'opzione "Flatten Directories". Una volta che ho avuto il vaso nella directory libs, tutto era tornato alla normalità.

Speriamo che questo salvi qualcuno il mal di testa!

+0

Sembra decisamente correlato ai file jar errati. – Argyle

Problemi correlati