小编典典

在Jenkins上编译Android项目时,如何修复此ZipException?

jenkins

我最近将Jenkins机器上的Android
SDK从rev13更新到rev15,并且不得不重做一些自定义构建内容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工作区目录中运行,并使用与Jenkins使用的相同的Android
SDK,Ant和JDK,我可以成功构建项目。我什至从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因此它显然是相关的,但不幸的是,此行为没有任何改善。

我没主意了。有什么帮助吗?


阅读 304

收藏
2020-07-25

共1个答案

小编典典

原来的问题是,由于使用Jenkins矩阵构建功能(顺便说一句,这是一个非常好的功能)所涉及的一些配置问题,图书馆没有将其classes.jar文件放在父项目期望找到的位置,导致报告的错误。基本上,这是一个“找不到文件”,但没有这样说。我们仍然不确定LD_LIBRARY_PATH与它有什么关系(如果有的话)。

我的同事build.xml对主要项目和库的文件进行了调整,以更加有力地就输出文件的最终输出位置达成共识,现在一切又都可以正常工作了,这极大地减轻了我们的负担。

2020-07-25