如何从Eclipse部署Scala项目?

lac*_*ach 11 eclipse scala jetty embedded-jetty

我在Eclipse中有一个Scala项目需要打包,所以我可以将它部署到服务器上.它基于Jetty,但它作为独立的应用程序运行.它包含Scala类,Java类和许多第三方jar.

我假设在Scala Eclipse插件中会有某种部署选项,但我画了一个空白.

将Scala项目打包成可运行文件的最简单方法是什么,以便可以部署?

任何帮助非常感谢.干杯.

Tho*_*ung 5

Sbt 支持Web应用程序部署.您当然可以使用Ant,Maven或其他构建工具来打包WAR以进行Jetty部署.您可以从eclipse启动sbt作为外部工具.

Sbt似乎支持JRebel配置.一旦运行,您应该能够从eclipse更改资源和类,而无需额外的战争部署步骤.


lac*_*ach 5

经过大量的试验和错误,这是我找到的用于打包Scala应用程序以进行分发的最佳方法:

首先,创建一个Java类作为应用程序的主要入口点,如Gary Boon所述.这允许您使用java命令从JAR运行应用程序.我发现使用java命令运行Scala类是有问题的,即使您在源路径上有Scala库:

import java.util.ArrayList;

import scala.tools.nsc.MainGenericRunner;


public class Main { 
    public static void main (String[] args) {
        ArrayList<String> argList = new ArrayList<String>();
        argList.add("fully.qualified.ClassName");
        for (String s : args) {
            argList.add(s);
        }
        MainGenericRunner.main(argList.toArray(new String[0]));
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用Eclipse的Export Runnable JAR命令将所有类和库打包到JAR文件中.将JAR的主类设置为Java入口点.您还可以将Eclipse生成的输出设置保存为ANT构建文件,以便进行调整.使用ANT创建带有Java入口点的JAR可以获得最佳结果.您还可以通过这种方式打包其他JAR依赖项,这使得在尝试在其他主机上运行JAR时更加简单.至少您需要Scala库和Scala工具JAR.

<zipfileset excludes="META-INF/*.SF" src="${scala.lib.jar}"/>
<zipfileset excludes="META-INF/*.SF" src="${scala.tools.jar}"/>
Run Code Online (Sandbox Code Playgroud)

如果您使用嵌入式Jetty,就像我一样,您可以使用以下命令()将服务器作为守护程序进程运行:

nohup java -jar MyJettyServer.jar < /dev/null >> server.log 2>> server_error.log &
Run Code Online (Sandbox Code Playgroud)

这将程序作为后台进程运行,该进程独立于当前用户会话,因此在您注销主机后该过程将继续.