Как я могу исправить это ZipException при компиляции проекта Android на Jenkins? - PullRequest
7 голосов
/ 29 октября 2011

Я недавно обновил Android SDK на компьютере Jenkins до rev15 с rev13, и мне пришлось переделать некоторые из наших пользовательских компонентов сборки в build.xml, чтобы соответствовать изменениям, внесенным в rev14.Я разработал это на своей рабочей станции и проверил, ожидая, что все будет персиковым.Вместо этого сборка завершается с ошибкой:

-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

Я могу успешно построить проект, запустив ant под пользователем Jenkins непосредственно в каталоге рабочей области Jenkins с теми же Android SDK, Ant и JDKчто Дженкинс использует.Я даже вырезал и вставлял строку выполнения из журнала Jenkins, чтобы убедиться, что все ручки и переключатели установлены одинаково.Так что проблема заключается в том, как Jenkins выполняет сборку.

Я заставил Jenkins вывести окружение как шаг "shell exec" сборки, и я вижу, что установлена ​​переменная LD_LIBRARY_PATH.

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

Я установил это значение в своем терминале во время запуска сборки из оболочки, и оно завершается сбоем точно так же, как при запуске Jenkins.Ах-ха!

Проблема в том, что я не могу понять, как не дать переменной LD_LIBRARY_PATH установить или указать на что-то, что не вызовет этой проблемы.Это не установлено в среде пользователя Jenkins, и я не могу найти ничего, что могло бы быть ссылкой на него в конфигурации Jenkins.Установленное значение изменилось, когда я установил обновленный JDK и обновил значение JAVA в /etc/defaults/jenkins, поэтому оно явно связано, но, к сожалению, поведение не улучшилось.

У меня нетидеи.Любая помощь?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Проблема оказалась в том, что из-за некоторой нехватки конфигурации, связанной с использованием функции построения матрицы Jenkins (кстати, очень хорошая функция), библиотека не помещала свой файл classes.jar в родительский проект. ожидал найти его, в результате чего сообщается об ошибке. Это был «файл не найден», который так не говорит. Мы до сих пор не уверены, что (если вообще что-то?) Было связано с LD_LIBRARY_PATH.

Мой коллега подправил файл build.xml для основного проекта и библиотеки, чтобы более решительно договориться о том, где будут находиться выходные файлы, и теперь все работает снова, к нашему большому облегчению.

0 голосов
/ 21 сентября 2012

У меня была такая же проблема.Я строил на Дженкинсе, а банку неправильно копировали в библиотеки.

Я использую плагин Jenkins Copy Artifacts, чтобы взять общую библиотечную флягу и скопировать ее в libs /.Я получил ошибку, когда не использовал опцию «Сгладить каталоги».Как только я поместил jar в каталог libs, все вернулось к норме.

Надеюсь, это избавит кого-то от головной боли!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...