我在Eclipse中有一个Scala项目需要打包,所以我可以将它部署到服务器上。它基于Jetty,但它作为独立应用程序运行。它包含Scala类,Java类和许多第三方jar。
我假设在Scala Eclipse插件中会有某种部署选项,但我画了一个空白。
将Scala项目打包成可运行文件的最简单方法是什么,以便可以部署?
任何帮助非常感谢。 干杯。
我在Eclipse中有一个Scala项目需要打包,所以我可以将它部署到服务器上。它基于Jetty,但它作为独立应用程序运行。它包含Scala类,Java类和许多第三方jar。
我假设在Scala Eclipse插件中会有某种部署选项,但我画了一个空白。
将Scala项目打包成可运行文件的最简单方法是什么,以便可以部署?
任何帮助非常感谢。 干杯。
SBT 支持Web应用程序部署。您当然可以使用Ant,Maven或其他构建工具来打包WAR以进行Jetty部署。您可以从eclipse启动sbt作为外部工具。
Sbt似乎支持 JRebel的 组态。一旦运行,您应该能够从eclipse更改资源和类,而无需额外的战争部署步骤。
SBT 支持Web应用程序部署。您当然可以使用Ant,Maven或其他构建工具来打包WAR以进行Jetty部署。您可以从eclipse启动sbt作为外部工具。
Sbt似乎支持 JRebel的 组态。一旦运行,您应该能够从eclipse更改资源和类,而无需额外的战争部署步骤。
经过大量的试验和错误,这是我发现的用于打包Scala应用程序以进行分发的最佳方法:
首先,创建一个Java类作为应用程序的主要入口点,如下所述 加里·布恩。这允许您使用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了 导出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,就像我一样,您可以使用以下命令将服务器作为守护程序进程运行(资源):
nohup java -jar MyJettyServer.jar < /dev/null >> server.log 2>> server_error.log &
这将程序作为后台进程运行,该进程独立于当前用户会话,因此在您注销主机后该过程将继续。
我正在做同样的事情:开发在嵌入Jetty的普通应用程序内运行的服务器端代码。现在它主要是Scala代码,它曾经是Java。无论哪种方式,我只需从一个或多个JAR文件运行Java代码。
在这两种情况下,我都使用Ant进行部署构建。我的Scala项目有时使用现有的Java类。为此我添加了一个Ant目标,它将Java类编译成一个JAR,随后在我的Eclipse Scala插件和Ant部署构建目标中使用。
一个简单的解决方案是创建一个调用Scala程序主方法的小型Java类。然后,可以使用标准的eclipse jar导出。
public class Main {
public static void main (String[] args) {
MyScalaObjectWithMainMethod.main(args);
}
}
重要: 在导出之前,请确保scala-library.jar在构建路径中作为 外罐 (而不是作为库),以便它将与您的jar一起导出。
我发现这个解决方案是Jesper Villadsen的评论 加里布恩的页面 (他提出了一种有点复杂的方法)。虽然我在运行Gary的解决方案时遇到了问题,但Jesper的这个解决方案对我来说非常适合。谢谢!
您可以使用eclipses创建WAR文件的能力,就像使用Java一样。或者一个jar文件,就像你对Java一样。因为,在运行时它是java。 不再需要魔法了。