2

我有一个 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 启动时,这工作得很好而且很花哨,但是当我将它导出为 jar 时,它会给我 18 个左右的异常。我现在确实知道如何复制 Eclipse 设法启动它的“环境”,我很确定它依赖于 Scala 已经在我的系统上的事实——我需要一个包含所有东西的自包含 jar。

*2。我的第二次尝试包括尝试lach在这里建议的内容如何从 Eclipse 部署 Scala 项目? 即:

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开始。我有一种感觉,我没有完全正确。qualified.ClassName。*3。如果主要的Scala 类被称为“Dis.scala”并且位于包“pack”中,那么这个fully.qualified.ClassName不应该是“pack.Dis”吗?

我正在使用 Jre 1.6 和 Scala 2.9.2 编辑:我已经包含了所有外部导入的 jar,甚至是 scala-library.jar - 一切都很好并且装在 jar 中

PS 我不熟悉 Ant 或 Maven 或 Sbt。我只想让我的 Scala 项目 jared - 如果可能的话,不要卷入毛茸茸的事情。

4

2 回答 2

10

这对我有用: 1. 创建 scala 项目 2. 创建 Wrapper java 项目 3. 将 scala-library.jar 添加到您的 java 项目构建路径。

所以你只需要第三步,因为其余的看起来和我做的很相似。然后就可以愉快的使用了:java - jar file.jar

编辑:如何使用 Scala - Eclipse IDE 创建包含另一个 Java 项目可以使用的 Scala/代码的 JAR 文件。

  1. 创建一个新的 Scala 项目并定义一个带有 main 方法的对象作为入口点。
  2. 现在创建一个新的 Java 项目并将您的 Scala 项目添加到新的构建路径中。此外,将 scala-library.jar 添加到 Java 项目中。
  3. 现在在 java 项目中创建一个 Wrapper 类,它从 scala 库中调用您的入口点类。运行包装类创建一个eclipse运行配置并测试是否可以调用scala项目。
  4. 使用 Export->Java->Runnable JAR 文件,Wizard 现在在包装器项目上。eclipse 运行配置将用作 JAR 的入口点。根据您的需要,您可能希望:将所需的库提取到生成的 JAR 中或将所需的库打包到生成的 JAR 中

最后你会得到一个完整的打包 JAR,你可以像这样使用它:

java - jar Wrapped.jar

于 2012-07-10T14:13:22.543 回答
0

对我来说,这相对简单。

  1. 使用 scala IDE(或 java 的 eclipse)开发和测试项目。
  2. 准备好后,使用文件 -> 导出方法为项目生成 jar。

为了提交火花(我正在为火花写一些东西),我只需要提到 --class 选项来指定 jar 的主类。

希望有所帮助。

于 2017-01-20T04:05:42.577 回答