2014-08-27 63 views
0

我想从我的Scala项目创建一个可执行的Jar。因此,我遵循了一个教程。它建议在eclipse中创建一个Java主类,该类调用Scala入口点。这在eclipse中执行时很好。添加完这个类之后,我能够导出一个可执行的jar文件。然而,它不会与从Eclipse使用Java主类的可执行Scala Jar

java -jar myjar.jar 

我确保在导出时激活“将所需的库包装到jar中”。我的Java主类看起来是这样的(其中驱动器也位于封装件芯)

package core; 

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

并执行出口焦炭的follwing错误时抛出,我可以调试:

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

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

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

如果你不使用任何行家或SBT我建议切换到他们以及他们在斯卡拉

+0

我SBT使用的主要支持的编译系统,不是与onejar,而是组装。它工作很好,很容易设置。但是,我在Maven中遇到了一些小问题。说实话,我没有努力尝试,因为我已经跑步了;)我接受你的答案,但是如果其他人直接回答我的问题,它会更好。 – smoes 2014-08-29 07:03:44