1

我从我的 Scala 项目中构建了一个 jar。

对于我想从这个 jar 使用的内容,我有以下结构

package aaa.bbb.ccc    

case class FooResult(...)

trait Foo(...) {
  def bar(): FooResult
}

object Foo {
  private class FooImpl(...) extends Foo {
    ...
  }

  def apply(...): Foo
}

第一个问题:也许我误解了 Py4J 提供的东西,但是如果我想使用自己的类,是否必须编写一个 java/scala 类来启动 Py4J 网关?还是将其添加到网关的 jvm 类路径就足够了?

第二个问题(根据上面的答案,我猜这并不适用):如何在启动 java 网关时添加我的 jar 以使其可用?为了暂时解决这个问题,我只是用我的 jar 和 Py4J jar 手动启动了 jvm 和这个命令

java -classpath "path/to/py4j.jar:path/to/my.jar" py4j.GatewayServer 0

然后从 Python 代码手动连接到它。然后我尝试通过导入我的课程

java_import(gateway.jvm, "aaa.bbb.ccc.*")

它没有抛出任何错误,但我不确定它是否有效,因为如果我输入一些虚假的类路径,它不会抛出任何错误。

第三个问题(如果第一个问题的答案是我必须编写入口点来访问我的类):使用 scala 时这是如何工作的?

object Main extends App {
  val gw = new GatewayServer(// TODO: how to expose my classes here?
}
4

0 回答 0