【问题标题】:how to run scala jar file within java file?如何在java文件中运行scala jar文件?
【发布时间】:2015-06-28 23:24:36
【问题描述】:

我需要从 Java 代码运行 Scala jar 文件:

所以,如果我有这个 Scala 代码:

object test extends App {
    override def main(args: Array[String]) {
        println("Hello, world! " + args.toList)
    }
}

我在demo.jar 中导出,我想从Java 应用程序内部执行? 我使用它的方式是抛出运行时进程,这对我不起作用?

import java.io.InputStream;
import org.apache.commons.io.IOUtils;

public class testscalajar {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            Process proc = Runtime.getRuntime().exec(new String[]{"scala","-cp","d:\\demo.jar", "test"});
            // Then retrieve the process output
            InputStream in = proc.getInputStream();
            InputStream err = proc.getErrorStream();
            String inString = IOUtils.toString(in, "UTF8"); 
            String errString = IOUtils.toString(err, "UTF8"); 
            System.out.println(inString);
            System.out.println(errString);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

有人有其他解决方案吗??????

【问题讨论】:

  • 请,请不要这样做。编译后的 Scala 代码是 JVM 字节码,从 Java 中使用它非常容易(特别是如果您使用的是支持 Scala 的 JVM 构建工具,这是其中的大多数)。

标签: java scala


【解决方案1】:

Scala 编译为普通的 JVM .class 文件,您不需要任何外部进程即可使用来自 Java 的 Scala 代码或来自 Scala 的 Java 代码。

确保您的路径设置正确,然后只需创建 Scala 对象并从您的 Java 代码调用 Scala 方法,就好像它只是另一个 Java 库一样。

【讨论】:

  • 您确保正确的jars 在您的类路径中,您确保您在Java 代码中使用import yourpackage.App;,然后您只需调用主App.main(new String[]{})。但是,您可能不想将其称为 main。您使用的是什么构建工具?
  • 我正在使用支持 scala IDE 的 eclips
  • Eclipse 是一个 IDE,而不是一个构建工具。但是,它应该有Project -> Dependencies -> Add External Jars 或类似的东西。所以你打开你的java项目,添加包含你编译的scala代码的“scala-jar”,添加所有需要的scala库(这就是像SBT这样的构建工具会派上用场的地方),就像使用它一样它是“java-jar”(虽然“java-jars”和“scala-jars”实际上没有区别,只是 JVM 字节码)。
猜你喜欢
  • 2011-03-16
  • 2014-06-07
  • 2020-02-22
  • 1970-01-01
  • 2017-05-21
  • 2013-07-15
  • 2017-07-09
  • 2017-04-23
  • 2015-08-15
相关资源
最近更新 更多