2012-10-16 10 views
10

मुझे स्कैला के साथ कोई अनुभव नहीं है, इसलिए यह प्रश्न प्राथमिक हो सकता है। मैं इस ट्यूटोरियल में "व्यक्ति" उदाहरण के आधार पर जावा के भीतर से स्कैला कक्षा का उपयोग करने की कोशिश कर रहा हूं: http://www.codecommit.com/blog/java/interop-between-java-and-scalaजावा से स्केल क्लास का उपयोग करके NoClassDefFoundError

मैं दो स्रोत फाइलें, एक स्कैला और एक जावा बना देता हूं।

Person.scala:

class Person { 
    def getName() = "Daniel Spiewak" 
} 

Test.java:

public class Test { 
    public static void main(String[] args) { 
    Person p = new Person(); 
    p.getName(); 
    } 
} 

मैं (एक चेतावनी मुझे समझ नहीं आता के साथ) संकलन कर सकते हैं, लेकिन मैं एक ClassNotFoundException मिलता है जब मैं चलाने का प्रयास कार्यक्रम।

 
$ scalac Person.scala 
$ javac Test.java 
./Person.class: warning: Cannot find annotation method 'bytes()' in type 'ScalaSignature': class file for scala.reflect.ScalaSignature not found 
1 warning 
$ java Test 
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:787) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at Test.main(Test.java:3) 
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     ... 13 more 

कोई विचार क्या मैं गलत कर रहा हूं?

+0

कारण [यहां] है (http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html) – gks

+2

था की समीक्षा करें आप अपने क्लासपाथ में scala-library.jar शामिल हैं? –

+0

एक ही उदाहरण की कोशिश करते समय मुझे त्रुटि से नीचे मिला, कृपया मदद करें .. 'सी: \ उपयोगकर्ता \ उपयोगकर्ता 1 \ डेस्कटॉप> जावा-सीपी।: स्कैला-लाइब्रेरी-2.11.8.jar टेस्ट त्रुटि: नहीं मिला या मुख्य वर्ग परीक्षण लोड करें – rinuthomaz

उत्तर

12

स्कैला कक्षाओं का उपयोग करने में सक्षम होने के लिए आपको स्कैला रनटाइम लाइब्रेरी को शामिल करने की आवश्यकता है। यह संकलक चेतावनी और रनटाइम पर त्रुटि दोनों का कारण है।

इस

java -cp .:scala-library.jar Test 

(जार फ़ाइल का नाम अलग हो सकता है, लेकिन बिंदु अपने classpath में जोड़ने के लिए है) की कोशिश करो।

+0

पता था कि यह कुछ गूढ़ होगा। धन्यवाद! – del

+0

मैवेन का उपयोग करते समय मैं इस लाइब्रेरी को अपने क्लासस्पैट में कैसे जोड़ सकता हूं? –

+0

@ केविनमेनिथ: क्या आप अपना आवेदन बनाने या चलाने के लिए मेवेन का उपयोग करते हैं? – Thilo

2

क्या आपने अपने क्लासपाथ में scala-library.jar रखा था? ऐसा लगता है कि आप इसे भूल गए हैं, इसलिए जेवीएम स्कैला रनटाइम के लिए कुछ आंतरिक वर्ग नहीं ढूंढ सकता है।

अपने लिंक http://www.codecommit.com/blog/java/interop-between-java-and-scala में:

अपवाद के लिए

Just stick scala-library.jar on your classpath and all of your Scala classes should be readily available within your Java application.

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