2011-10-16 76 views
12

我試圖用Proguard縮小和混淆我的Scala/Java程序。雖然我只使用Scala的-library.jar,一切都很好,但是當我添加斯卡拉-swing.jar我的罐子,我得到如下:如何使用Proguard縮小scala swing庫?

Warning: scala.swing.ComboBox: can't find referenced class scala.swing.ComboBox$selection 
Warning: scala.swing.ListView: can't find referenced class scala.swing.ListView$selection 
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$indices 
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$items 
Warning: scala.swing.ListView$selection$$anon$7: can't find referenced class scala.swing.ListView$selection 
Warning: scala.swing.ListView$selection$Indices: can't find referenced class scala.swing.ListView$selection 
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices 
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices 
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection 
Warning: scala.swing.ListView$selection$items$: can't find referenced class scala.swing.ListView$selection 

如果我看着罐子,我看到真的沒有這樣的文件 - 有scala.swing.ComboBox$selection$.class而不是scala.swing.ComboBox$selection.class。手動重命名並不能解決問題 - 然後它會抱怨文件包含具有不同名稱的類。

那麼,這些非法引用scala-swing.jar?還是Proguard中的錯誤?

你能提出一種解決方法嗎?

編輯:我使用Scala的2.9.0.1和Proguard的4.6

EDIT2:使用Scala的2.9.1.final罐子並沒有幫助。

+1

你可能想嘗試在ProGuard的論壇中發帖:http://proguard.sourceforge.net/feedback.html –

回答

4

它看起來像在scala編譯器中的錯誤。例如,類文件斯卡拉/鞦韆/ ComboBox.class包含以下方法:

public final scala.swing.ComboBox$selection$ selection() 

內部,方法簽名表示如下:

()Lscala/swing/ComboBox$selection$; 

這看起來OK。然而,該方法也有一個簽名屬性,以保持擦除仿製藥的軌跡:

()Lscala/swing/ComboBox<TA;>.selection; 

正如你所看到的,簽名是缺少在最後一個$。在ProGuard的,你可以通過指定解決問題

-dontwarn scala.swing.** 
+0

是的,這不正是我想要的。謝謝! – Rogach