2012-07-10 105 views
2

我有一個Scala項目,我想將它導出爲jar。從Eclipse導出Scala項目爲jar

* 1。起初,我試圖創建項目的Java類作爲切入點

public class JMain { 
public static void main(String[] args) { 
    System.out.println("Java main calling Scala main"); 
    SMain.main(new String[] {""}); //SMain.main is the actual *main* 

,並從Eclipse的時候推出這個工作非常愉快,但是當我出口它作爲罐子它會給我18個例外左右。我現在知道如何複製那麼Eclipse能夠啓動的「環境」,我很確定它依賴於Scala已經在我的系統上這一事實 - 我需要一個自包含的jar,其中包含所有的東西。

* 2。我的第二次嘗試包括嘗試什麼LACH即這裏How to deploy a Scala project from Eclipse?建議 :

public class JMain { 
public static void main(String[] args) { 
    System.out.println("Java Main"); 
    List<String> argList = new ArrayList<String>(); 
    argList.add("fully.qualified.ClassName"); //??? 
    for (String s : args) argList.add(s); 
    scala.tools.nsc.MainGenericRunner.main(argList.toArray(new String[0])); 

這一次,它甚至不會從Eclipse中運行,雖然只給出6個左右開始與著名NoClassDefFoundError的例外。我有一種感覺,我沒有得到fully.qualified.ClassName沒錯。 * 3。如果主要的斯卡拉類被稱爲「Dis.scala」,並位於包「包」不應該這fully.qualified.ClassName是「pack.Dis」?

我使用JRE 1.6和Scala 2.9.2 編輯:我已經包括了所有外部進口的罐子,甚至斯卡拉-library.jar - 一切都是好的,裝在罐子裏

附:我不熟悉Ant或Maven或Sbt。我只是想讓我的Scala項目變得更加神奇 - 如果可能的話,不要進入毛茸茸的東西。

+1

從長遠來看,您可能會發現,爲了建立一個Sbt(或Maven)構建而預先投入適量的努力會更簡單,從這一點開始,生活變得更加容易。 – 2012-07-10 14:52:00

回答

9

這裏是我工作: 1.創建斯卡拉項目 2.創建包裝Java項目 3階,library.jar添加到您的Java項目的構建路徑。

所以你只需要第三步,因爲其餘的看起來與我所做的相似。然後你可以很開心地使用:java - jar file.jar

編輯: 如何使用Scala - Eclipse IDE創建一個包含Scala/Code的JAR文件,該文件可以被另一個Java Project使用。

  1. 創建一個新的Scala項目並定義一個主對象作爲入口點。
  2. 現在創建一個新的Java項目,並將您的Scala項目添加到新的構建路徑。另外將scala-library.jar添加到Java項目中。
  3. 現在在java項目中創建一個Wrapper類,它從scala庫調用你的入口點類。運行包裝類來創建一個eclipse運行配置,並測試是否可以調用scala項目。
  4. 現在使用導出 - > Java->可運行JAR文件,嚮導在包裝器項目上運行。Eclipse運行配置將用作JAR的入口點。根據您的需求,你可能想: 提取所需的庫到生成JAR 或 包所需的庫到生成JAR

最後你得到一個完整的打包JAR您可以使用這樣的:

的java - jar wrapped.jar

+1

你能否詳細說明你的答案,以便它可以幫助他人,而不僅僅是原始的海報? – CosminO 2013-02-16 13:14:35

+1

@Ameoo那個更好? – AndreasScheinert 2013-02-20 20:12:55

+0

是的:)非常感謝! – CosminO 2013-02-21 09:00:30

0

對我來說,這是相對簡單的。

  1. 使用scala IDE(或eclipse for java)開發和測試項目。
  2. 一旦準備就緒,使用file - > export方法爲項目生成jar。

提交火花(我在寫東西的火花),我不得不提一下--class選項用於指定的jar的主類。

希望能提供幫助。