给定以下类及其伴生对象:
class B extends A
object B extends B
其中 A 是另一个文件中的抽象类:
abstract class A {
def main(args: Array[String]): Unit = println("hey")
}
上面的代码使用sbt assembly插件打包成uber-jar,入口点是继承自class B
的object B
main方法。
以上效果很好。它运行了。完全没问题。
然而,sbt 不断发出警告:
[warn] B has the main method with parameter type Array[String], but B will not be a runnable program.
[warn] Reason: companion contains its own main method, which means no static forwarder can be generated.
[warn] object B extends B
- 您知道此警告的含义吗?
- 为什么 sbt 保证
对象 B
不会运行,也不会发生?
谢谢。
最佳答案
对于可在 java 中运行的类,main
需要是静态的。你的不是,所以,该对象不可运行。这就是编译器告诉你的。
只需将 A
中的 main
重命名为其他名称,然后在调用它的对象中添加一个 main
即可。
关于Scala - "companion contains its own main method, which means no static forwarder can be generated"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71432018/