简体   繁体   中英

got java.lang.NoClassDefFoundError: scala/Serializable with scala jars in classpath

How can I have this exception with scala-compiler-2.8.0.jar and scala-library-2.8.0.jar on my classpath?

Exception in thread "main" java.lang.NoClassDefFoundError: scala/Serializable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at kafka.utils.ZKConfig.<init>(ZkUtils.scala:302)
at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:25)
at pt.sapo.labs.crawl.twitter.streaming.adapter.MessageBrokerStatusAdapter.<init>(MessageBrokerStatusAdapter.java:30)
at pt.sapo.labs.TwitterStreamClientApplication.createAdapters(TwitterStreamClientApplication.java:73)
at pt.sapo.labs.TwitterStreamClientApplication.start(TwitterStreamClientApplication.java:57)
at pt.sapo.labs.Main.main(Main.java:39)
Caused by: java.lang.ClassNotFoundException: scala.Serializable
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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 17 more

This is my META-INF/MANIFEST.MF

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.6.0_24
Main-Class: pt.sapo.labs.Main
Class-Path: lib/twitter4j-async-3.0.4-SNAPSHOT.jar lib/twitter4j-core-
3.0.4-SNAPSHOT.jar lib/twitter4j-stream-3.0.4-SNAPSHOT.jar lib/log4j-
1.2.16.jar lib/jackson-mapper-asl-1.9.5.jar lib/jackson-core-asl-1.9.
5.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.0.4.jar li
b/commons-codec-1.2.jar lib/httpcore-4.1.4.jar lib/httpclient-4.1.3.j
ar lib/httpmime-4.1.3.jar lib/commons-io-2.3.jar lib/jcl-over-slf4j-1
.6.4.jar lib/slf4j-api-1.6.4.jar lib/wstx-asl-3.2.7.jar lib/stax-api-
1.0.1.jar lib/slf4j-jdk14-1.6.4.jar lib/log4j-over-slf4j-1.6.4.jar li
b/mongo-java-driver-2.7.3.jar lib/kafka_2.9.2-0.7.0.jar lib/zookeeper
-3.3.4.jar lib/zkclient-0.1.jar lib/scala-compiler-2.8.0.jar lib/scal
a-library-2.8.0.jar

I'm running my jar like this as I always did.

java -jar reaction-twitter-streaming-client.jar

I would like to understand why it is giving me this exception.

I'd guess, there is some problem with definition of Class-Path variable. Look here: docs.oracle.com/javase/tutorial/deployment/jar/downman.html and docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html

  1. Is there an empty line at the end of your META-INF/MANIFEST.MF file?
  2. are your relative paths correct? (from dir where your jar is located, can you access the libraries?)

If none of these will work. I'd try some toy example with one library and try to put it in the same dir as your jar file is located and then to some subdir,... to see how Class-Path is working ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM