2011-10-16 22 views
12

Tôi đã cố gắng thu nhỏ và làm xáo trộn chương trình Scala/Java của mình bằng Proguard. Trong khi tôi đang sử dụng chỉ scala-library.jar, mọi thứ vẫn ổn, nhưng khi tôi thêm scala-swing.jar để lọ của tôi, tôi nhận được như sau:Làm thế nào để thu nhỏ thư viện scala swing bằng 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 

Nếu tôi nhìn vào lọ, tôi thấy rằng thực sự không có tệp nào như vậy - có scala.swing.ComboBox$selection$.class thay vì scala.swing.ComboBox$selection.class. Đổi tên thủ công không làm thủ thuật - nó sau đó than phiền rằng tệp chứa lớp có tên khác.

Vì vậy, có phải những tham chiếu bất hợp pháp này trong scala-swing.jar không? Hoặc một lỗi trong Proguard?

Bạn có thể đề xuất cách giải quyết khác không?

EDIT: Tôi đang sử dụng Scala 2.9.0.1 và Proguard 4,6

EDIT2: Sử dụng Scala 2.9.1.final lọ không giúp đỡ.

+1

Bạn có thể muốn thử đăng trên các diễn đàn ProGuard: http://proguard.sourceforge.net/feedback.html –

Trả lời

4

Dường như một lỗi trong trình biên dịch scala. Ví dụ, các tập tin lớp scala/swing/ComboBox.class chứa các phương pháp sau đây:

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

Bên trong, chữ ký phương pháp được thể hiện như sau:

()Lscala/swing/ComboBox$selection$; 

Điều đó có vẻ ok. Tuy nhiên, phương pháp này cũng có một thuộc tính Chữ ký để theo dõi các Generics xóa:

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

Như bạn có thể thấy, chữ ký thiếu $ ở cuối. Trong ProGuard, bạn có thể làm việc xung quanh vấn đề bằng cách xác định

-dontwarn scala.swing.** 
+0

Vâng, đó thực hiện chính xác những gì tôi muốn . Cảm ơn bạn! – Rogach

Các vấn đề liên quan