我开发了一个Java项目,其中我编写了一些Scala类和一些Java类。我在项目中使用Scala-Neo4j wrapper编写Scala函数来插入和检索Neo4j节点。我还在项目中用java编写了Thrift服务,因为我需要从Php中调用这些Scala函数。最后我使用Eclipse提取了一个jar文件,我尝试从命令行运行它,我得到了以下异常
Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/scala/Neo4jWrapper
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
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 dum.Sad.main(Sad.scala)
at dum.ScalaRunner.main(ScalaRunner.java:7)
Caused by: java.lang.ClassNotFoundException: org.neo4j.scala.Neo4jWrapper
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)
... 14 more
从Eclipse运行项目时,它完全正常。但是,在运行我从项目中提取的jar文件时,我得到了上面的Exception。我哪里出错?
答案 0 :(得分:1)
似乎您没有正确设置类路径。试试这个:
scala -cp ./where/is/Neo4jWrapper/jar YourClass
当然,将./where/is/Neo4jWrapper/jar
替换为.jar的路径。请注意,如果您需要指向多个jar或类目录,则需要使用:
(如果在Linux / Mac上)或;
(如果在Windows中)将它们分开。并避免类路径中的空格。