2011-10-16 12 views
12

मैंने प्रोगार्ड का उपयोग करके अपने स्कैला/जावा प्रोग्राम को कम करने और खराब करने की कोशिश की। जब मैं केवल स्केला-library.jar उपयोग कर रहा था, सब कुछ ठीक था, लेकिन जब मैं अपने जार करने के लिए स्केला-swing.jar जोड़ने के लिए, मैं निम्नलिखित मिल:प्रोगार्ड का उपयोग कर स्कैला स्विंग लाइब्रेरी को कैसे छोटा करें?

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 में हैं? या प्रोगुआर्ड में एक बग?

क्या आप एक समाधान का सुझाव दे सकते हैं?

संपादित करें: मैं स्काला 2.9.0.1 और ProGuard का उपयोग करके कर रहा हूँ 4.6

EDIT2: का प्रयोग स्काला 2.9.1.final जार मदद नहीं की।

+1

आप ProGuard मंचों में पोस्ट करने का प्रयास करना चाह सकते हैं: करता है कि मैं वास्तव में क्या चाहते थे http://proguard.sourceforge.net/feedback.html –

उत्तर

4

यह स्कैला कंपाइलर में एक बग जैसा दिखता है।

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

आंतरिक रूप से, विधि हस्ताक्षर के रूप में इस का प्रतिनिधित्व करती है:

()Lscala/swing/ComboBox$selection$; 

कि ठीक लग रहा है उदाहरण के लिए, वर्ग फ़ाइल स्केला/स्विंग/ComboBox.class निम्न विधि में शामिल है। हालांकि, विधि भी मिट जेनरिक का ट्रैक रखने के लिए एक हस्ताक्षर विशेषता है:

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

आप देख सकते हैं, हस्ताक्षर अंत में एक $ याद आ रही है। ProGuard में, आप निर्दिष्ट करने के द्वारा समस्या को हल करने कर सकते हैं

-dontwarn scala.swing.** 
+0

हाँ, । धन्यवाद! – Rogach

संबंधित मुद्दे