2014-08-27 35 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