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