2011-10-16 11 views
12

Próbowałem zmniejszyć i zaciemnić mój program Scala/Java za pomocą Proguard. Chociaż używałem tylko scala-library.jar, wszystko było w porządku, ale kiedy dodać scala-swing.jar do moich słoikach, mam następujące:Jak zmniejszyć bibliotekę swingów za pomocą programu 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 

Jeśli patrzę w słoiku, widzę, że tak naprawdę nie ma takich plików - zamiast scala.swing.ComboBox$selection$.class zamiast scala.swing.ComboBox$selection.class. Ręczna zmiana nazwy nie wystarczy - następnie narzeka, że ​​plik zawiera klasę o innej nazwie.

Czy są to nielegalne odwołania w pliku scala-swing.jar? Lub błąd w Proguard?

Czy możesz zaproponować obejście tego problemu?

EDIT: używam Scala 2.9.0.1 i PROGUARD 4,6

EDIT2: Korzystanie słoiki Scala 2.9.1.final nie pomogło.

+1

Możecie spróbować delegowania na forach PROGUARD: http://proguard.sourceforge.net/feedback.html –

Odpowiedz

4

Wygląda jak błąd w kompilatorze scala. Na przykład, plik klasy scala/Swing/ComboBox.class zawiera następującą metodę:

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

Wewnętrznie podpis metody przedstawia się następująco:

()Lscala/swing/ComboBox$selection$; 

To wygląda OK. Jednak metoda ma również atrybut Signature, aby śledzić wymazywane generyczne:

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

Jak widać, na końcu podpisu brakuje $. W PROGUARD, można obejść ten problem, określając

-dontwarn scala.swing.** 
+0

Tak, że robi dokładnie to, co chciałem . Dziękuję Ci! – Rogach

Powiązane problemy