2011-12-15 18 views
9

मेरे पास रिमोटएक्टर के साथ एक छोटा सा एप्लीकेशन है, और मैं इससे एक जार फ़ाइल बनाना चाहता हूं। जब मैंने इसे निष्पादित करने के लिए कोशिश यह इस अपवाद हो जाता है:स्कैला जार फ़ाइल चलाते समय NoClassDefFoundError

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.NoClassDefFoundError: scala/actors/Combinators 
    at pingpong.PingApp$.main(PingApp.scala:5) 
    at pingpong.PingApp.main(PingApp.scala) 
    at pingpong.ScalaEntryPoint.main(ScalaEntryPoint.java:5) 
    ... 5 more 
Caused by: java.lang.ClassNotFoundException: scala.actors.Combinators 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    ... 8 more 

मैं अपने जार फ़ाइल में शामिल है स्केला-library.jar, और यह classpath में है। अन्यथा जावा ScalaObject कक्षा को खोजने पर रोक देगा।

+0

अधिक रनटाइम जानकारी अच्छी होगी। क्या आप मेवेन के साथ एक जार बनाने की कोशिश कर रहे हैं? या बस इसे ग्रहण के साथ चला रहा है? – hellectronic

+1

कम से कम, आपके द्वारा बुलाए गए कमांड लाइन को दिखाएं और उल्लेख करें कि आप किस स्कैला का उपयोग कर रहे हैं। – retronym

+0

कमांड: जावा -jar myjar.jar मैं स्कैला 2.7.7 फ़ाइनल – laci37

उत्तर

1

समस्या ग्रहण और स्थापित स्कैला संस्करण पर स्कैला प्लगइन के बीच एक संस्करण मेल नहीं था। अभिनेता/कॉम्बिनेटर्स.scala 2.8 में दिखाई दिए, और ग्रहण प्लगइन 2.8 था, हालांकि मैंने 2.7.7 स्कैला-लाइब्रेरी.जर

4

जावा "जार के भीतर जार" को संभाल नहीं करता है। डिफ़ॉल्ट क्लासलोडर इस तरह से कक्षाओं को लोड नहीं कर सकता है।

अपने स्टैकट्रैक से, ऐसा लगता है कि आपने एक्लिप्स के निर्यात-> जावा-> रननेबल जार का उपयोग किया है। इसमें एक विशेष क्लासलोडर शामिल होना चाहिए जो जार लोडिंग में जार को संभालता है लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।

मुझे लगता है कि जार बनाने में कुछ गड़बड़ हुई है या यह आपके जार और आपके क्लासपाथ दोनों में स्केल द्वारा उलझन में है। आप "पैकेज पुस्तकालयों में जार" के बजाय "जार में पुस्तकालय निकालें" का उपयोग कर फिर से कोशिश कर सकते हैं। आप क्लासपाथ पर स्कैला के बिना इसे आजमा सकते हैं।

असफल यदि आप एक ही शिप करने योग्य जार चाहते वहाँ अन्य विकल्प हैं कि:

  • आप जार आप पर निर्भर के सभी खोल और उन्हें अपने संकलित वर्गों के साथ repack (होना चाहिए क्या "निकालने" कर सकता है ऊपर)। मेवेन की shade प्लगइन इसके साथ मदद कर सकता है।

  • आप एक अलग समाधान है कि classloader कार्यान्वयन कि नेस्टेड जार लोड कर सकते हैं प्रदान करेगा, जैसे OneJar

आशा उपयोग कर सकते हैं आप और अधिक मदद की जरूरत है अगर आप वास्तव में क्या आप कुछ कदमों का विवरण देना होगा यह उपयोगी है, इस जार का उत्पादन करने के लिए, और शायद "जार tvf myjar.jar" का उत्पादन भी मदद करेगा।

+0

मैंने स्केल लाइब्रेरी को जार फ़ाइल में निकालने का प्रयास किया लेकिन परिणाम एक ही अपवाद है। ऐसा लगता है कि कोई scala.actors.Combinators वर्ग scala-library.jar – laci37

+0

क्या आप "jar tvf myjar.jar" चला सकते हैं और यह सुनिश्चित कर सकते हैं कि स्कैला-लैंग वहां दिखाई दे रहा है? यदि ऐसा है, तो निकालें (jar xvf) myjar.jar एक अस्थायी फ़ोल्डर में और फिर scala-lang.jar का निरीक्षण करें जो वही है? –

+0

जार tvf ping.jar | grep scala-lang कोई परिणाम नहीं दिखाता है। मैंने जार निकाला और स्कैला-लैंग नाम की कोई भी फाइल नहीं मिली। – laci37

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