2012-07-10 103 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的主类。

希望能提供帮助。