2011-10-16 10 views
12

Ho provato a ridurre e offuscare il mio programma Scala/Java usando Proguard. Mentre stavo usando solo scala-library.jar, tutto è andato bene, ma quando aggiungo scala-swing.jar ai miei vasi, ottengo il seguente:Come ridurre la libreria di oscillazione scala usando Proguard?

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 

Se guardo dentro il vasetto, vedo che non ci sono davvero file di questo tipo - c'è lo scala.swing.ComboBox$selection$.class anziché lo scala.swing.ComboBox$selection.class. Rinominare manualmente non fa il trucco, quindi si lamenta che il file contiene classi con un nome diverso.

Quindi, sono questi riferimenti illegali in scala-swing.jar? O un bug in Proguard?

Puoi suggerire una soluzione alternativa?

EDIT: sto usando Scala 2.9.0.1 e Proguard 4.6

EDIT2: Utilizzando vasetti Scala 2.9.1.final non ha aiutato.

+1

Si potrebbe desiderare di provare a inviare nei forum Proguard: http://proguard.sourceforge.net/feedback.html –

risposta

4

Sembra un bug nel compilatore di scala. Per esempio, il file di classe Scala/swing/ComboBox.class contiene il seguente metodo:

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

Internamente, la firma del metodo è rappresentato come segue:

()Lscala/swing/ComboBox$selection$; 

Questo sembra ok. Tuttavia, il metodo ha anche un attributo di firma per tenere traccia dei farmaci generici cancellati:

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

Come si può vedere, la firma manca un $ alla fine. In ProGuard, è possibile aggirare il problema specificando

-dontwarn scala.swing.** 
+0

Sì, che fa esattamente quello che volevo . Grazie! – Rogach

Problemi correlati