我已經看到了很多關於此錯誤的線程,但沒有覆蓋我奇怪的場景。首先,基礎知識:Ant構建與「意外頂級異常(已添加)」失敗
我有6個項目,所有這些都縮減模仿我的應用程序的結構和我使用的只是試圖讓構建工作的測試項目。它們的依賴性如下:
- exampleLib是,不需要任何其他的罐子
- 包含Widget.java 庫
- exampleLib2是,不需要任何其他的罐子庫
- 包含Widget2.java
- exampleLibNester是需要exampleLib和exampleLib2庫
- 包含WidgetPartDeux.java
- exampleLibNester2是需要exampleLib,exampleLib2和庫exampleLibNester
- 包含WidgetPartDeux2.java
- exampleUser是需要exampleLib,exampleLib2,exampleLibNester,和exampleLibNester2應用
- 包含TheActivity.java
- exampleTest是一個測試應用程序,儀器exampleUser和要求exampleLib,exampleLib2和exampleLibNester
- 包含WidgetTest.java
當我建立使用這些應用程序螞蟻本地在Windows上運行良好,我可以使用install test
來運行測試。當我嘗試在運行linux的CI服務器上構建它們時,我遇到了可怕的「已添加」錯誤消息。
-dex:
[dex] Converting compiled files and external libraries into /apps/pos360/jenkins/.hudson/jobs/James-Test/exampleLibUser/bin/classes.dex...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.lang.IllegalArgumentException: already added: Lcom/example/nester/WidgetPartDeux;
[dx] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[dx] at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[dx] at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[dx] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[dx] at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[dx] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
[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:91)
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.lang.IllegalArgumentException: already added: Lcom/example/lib/Widget;
[dx] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[dx] at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[dx] at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[dx] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[dx] at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[dx] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
[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:91)
[dx] 2 errors; aborting
我可以看看類。jar文件並查看該示例LibNester2將這些類拉入其罐子中,但我不知道如何阻止它做到這一點,也不知道爲什麼它在Linux盒子上做,而不是在Windows上做。兩個SDK都已更新到最新版本。
你有沒有讀過[這個線程](http://stackoverflow.com/questions/9513517/unexpected-top-level-exception-after-sdk-update)呢?它有幫助嗎? – yorkw 2012-07-28 08:12:57
Thhanks @yorkw。我讀過一個和其他幾個喜歡它的人。我的問題不僅僅是圖書館。我可以讓那些工作得很好。我的問題是先決條件項目中有嵌套庫。我終於將所有的子庫合併爲一個單獨的項目,但是我會留下這個問題,直到有人知道一個更好的方法時爲止。 – 2012-07-29 14:47:56
我覺得它很有趣,它可以在你的Windows機器上運行,並且不能在你的Linux機器上運行。您是否介意檢查項目的任何'lib'子文件夾中是否有任何垃圾文件?或者,也許你已經確定一切都在使用更新的'libs'機制?也許還可以在每個環境中檢查proguard.jar的版本。 – Joe 2012-08-02 02:24:15