当我使用Eclipse将我的scala代码打包到jar中时,我无法运行所述jar文件。我有:
object Hello extends App{
println("Hello World!")
}
和
public class Runner {
public static void main(String[] args) {
Hello.main(args);
}
}
我使用eclipse将其打包成一个名为Hello.jar的可运行jar。 java -jar Hello.jar然后给出:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/App
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 Hello.main(Hello.scala)
at Runner.main(Runner.java:4)
Caused by: java.lang.ClassNotFoundException: scala.App
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)
... 13 more
答案 0 :(得分:3)
您的应用程序依赖于Scala运行时库。这些应用程序在运行时需要可用,而且目前它们不是。
有两种方法可以解决这个问题:
java -jar /path/to/yourapp.jar
,并添加一个-cp
参数,其中包含Scala库JAR的路径。 Class-Path
属性 - see here)。这需要在构建过程中进行更多工作,但这意味着只需双击生成的JAR即可启动应用程序。答案 1 :(得分:1)
那是因为eclipse没有使用您的代码发送scala-library。更重要的是,您应该确保所有依赖项都在可执行jar的清单文件中。这是stackoverflow中的一个类似问题: running scala apps with java -jar