java - 从 Eclipse 将 Scala 项目导出为 jar

标签 java scala compilation

我有一个 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 此处建议的内容 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 开始。我有一种感觉,我没有得到完全合格的.ClassName 正确的结果。 *3.如果main Scala 类名为“Dis.scala”并且位于包“pack”中,那么这个完全限定的类名不应该是“pack.Dis”吗?

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

附注我不熟悉 Ant、Maven 或 Sbt。我只是希望我的 Scala 项目能够运行起来 - 如果可能的话,不要陷入麻烦的事情。

最佳答案

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

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

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

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

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

java - jarwrapped.jar

关于java - 从 Eclipse 将 Scala 项目导出为 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413888/

相关文章:

java - 如何在以前的 api 级别中使用 Java 特定的功能?

java - 用于从路径 WEB-INF\ftl\访问 Freemarker 文件的 Freemarker 模板

java - 一个例子中父类(super class)不能转换为子类,而另一个例子中可以顺利转换。为什么?

c - 使用 -std=c99 编译时,be64toh 未链接或声明

C++ VS2010 编译选项

c++ - 编译后在 OpenCV 中包含额外的库

java - hibernate 无法获得正确的结果集

scala - 访问惰性 val 的类型会导致它被评估吗?

用于 Web URL 的 ScalaCheck 生成器

arrays - 二维scala数组迭代