我从我的 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?
}