【问题标题】:How to deploy a Scala project from Eclipse?如何从 Eclipse 部署 Scala 项目?
【发布时间】:2010-05-27 13:39:49
【问题描述】:

我在 Eclipse 中有一个 Scala 项目,我需要将其打包,以便将其部署到服务器。它基于 Jetty,但它作为独立应用程序运行。它包含 Scala 类、Java 类和许多 3rd 方 jar。

我以为 Scala Eclipse 插件中会有某种部署选项,但我画了一个空白。

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

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

【问题讨论】:

    标签: eclipse scala jetty embedded-jetty


    【解决方案1】:

    Sbt supports web application deployments。您当然可以使用 Ant、Maven 或其他构建工具来打包您的 WAR 以进行 Jetty 部署。您可以将 sbt 作为 eclipse 的外部工具启动。

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

    【讨论】:

    【解决方案2】:

    经过大量试验和错误,这是我发现打包 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]));
        }
    }
    

    现在您可以使用 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}"/>
    

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

    nohup java -jar MyJettyServer.jar < /dev/null >> server.log 2>> server_error.log &
    

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

    【讨论】:

      【解决方案3】:

      我正在做同样的事情:开发在嵌入 Jetty 的普通应用程序中运行的服务器端代码。现在它主要是 Scala 代码,它曾经是 Java。无论哪种方式,我都只是从一个或多个 JAR 文件中运行 Java 代码。

      在这两种情况下,我都使用 Ant 进行部署构建。我的 Scala 项目有时会使用现有的 Java 类。为此,我添加了一个 Ant 目标,它将 Java 类编译成一个 JAR,随后在我的 Eclipse Scala 插件和 Ant 部署构建目标中都使用它。

      【讨论】:

      • 嗨西尔维奥。谢谢!这听起来正是我所需要的。您能否发布一个用于构建服务器应用程序的 ANT 文件示例?
      • 您可以在以下位置找到一个笨拙的示例:jambo-software.com/download/build.xml
      【解决方案4】:

      一个简单的解决方案是创建一个小的 Java 类来调用 Scala 程序的 main 方法。然后就可以使用标准的eclipse jar导出了。

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

      重要提示:在导出之前,请确保 scala-library.jar 作为外部 jar(而不是库)在构建路径中,以便将其导出和你的罐子一起。

      我发现这个解决方案是 Jesper Villadsen 在Gary Boone's page 上的评论(他提出了一种有点复杂的方法)。虽然我在运行 Gary 的解决方案时遇到了问题,但 Jesper 的这个解决方案非常适合我。谢谢!

      【讨论】:

        【解决方案5】:

        您可以使用 Eclipse 的功能来创建 WAR 文件,就像您创建 Java 一样。或者一个 jar 文件,就像 Java 一样。因为,在运行时它是java。 不再需要魔法。

        【讨论】:

        • 不,这对我不起作用。运行 jar 时,没有可供类执行的可选选项。也许如果你手工制作罐子,它会起作用吗?
        猜你喜欢
        • 2011-10-03
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 2016-08-30
        相关资源
        最近更新 更多