【问题标题】:How do I fix this ZipException while compiling an Android project on Jenkins?在 Jenkins 上编译 Android 项目时如何修复此 ZipException?
【发布时间】:2011-10-28 23:18:22
【问题描述】:

我最近将 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

我可以通过直接在 Jenkins 工作区目录中以 Jenkins 用户身份运行 ant 并使用 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

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

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

我没有想法。有什么帮助吗?

【问题讨论】:

    标签: android jenkins


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。我在 Jenkins 上构建,jar 被错误地复制到库中。

      我正在使用 Jenkins Copy Artifacts Plugin 来抓取一个通用库 jar 并将其复制到 libs/.当我没有使用“展平目录”选项时出现错误。 一旦我将 jar 放入 libs 目录中,一切就恢复正常了。

      希望这可以让别人头疼!

      【讨论】:

      • 看来肯定是jar文件放错了。
      猜你喜欢
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多