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

Arg*_*yle 7 android 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
Run Code Online (Sandbox Code Playgroud)

我可以ant使用Jenkins正在使用的相同Android SDK,Ant和JDK直接在Jenkins工作区目录中运行Jenkins用户来成功构建项目.我甚至将执行线从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
Run Code Online (Sandbox Code Playgroud)

我在从终端运行构建时在终端中设置了这个值,它的失败方式与Jenkins运行时的方式相同.啊,哈!

问题是我无法弄清楚如何防止LD_LIBRARY_PATH变量被设置,或者指向不会导致此问题的变量.它没有在Jenkins用户的环境中设置,我在Jenkins配置中找不到任何可能引用它的东西.当我安装更新的JDK并更新了JAVA值时,它设置的值确实发生了变化,/etc/defaults/jenkins因此它显然是相关的,但不幸的是,这种行为没有改善.

我没有想法.有帮助吗?

Arg*_*yle 1

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

我的同事调整了build.xml主项目和库的文件,以更有力地就输出文件的最终位置达成一致,现在一切都恢复正常了,这让我们松了一口气。