Eclipse中的可执行Scala Jar使用Java主类

时间:2014-08-27 15:49:19

标签: eclipse scala jar

我正在尝试从我的Scala项目创建一个可执行的Jar。因此,我遵循了一个教程。它建议在eclipse中创建一个Java主类,它调用Scala入口点。这在eclipse中执行时工作正常。添加此类后,我能够导出可执行jar。但是,它无法使用

java -jar myjar.jar

我确保激活"将所需的包打包到jar"出口时我的Java主类看起来像这样(其中Driver也位于包核心中)

package core;

public class Main {
     public static void main(String[] args) {
        Driver.main(args);
    }
}

执行导出的char时会抛出以下错误,我可以调试:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoClassDefFoundError: scala/collection/Seq
    at core.Driver$.main(Driver.scala:14)
    at core.Driver.main(Driver.scala)
    at core.Main.main(Main.java:5)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: scala.collection.Seq
    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:425)

1 个答案:

答案 0 :(得分:1)

您可以使用One-jar应用程序来保证jar文件中所有必需的jar文件,我怀疑scala-lang jar不在其中或在命令行的类路径中。

Maven:https://code.google.com/p/onejar-maven-plugin/ SBT:https://github.com/sbt/sbt-onejar

如果您没有使用maven或SBT,我建议您切换到它们,以及它们是Scala中主要支持的构建系统