Scala - "companion contains its own main method, which means no static forwarder can be generated"的含义

标签 scala jar jvm sbt

给定以下类及其伴生对象:

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 Bobject 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
  1. 您知道此警告的含义吗?
  2. 为什么 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/

相关文章:

scala - Play 框架和 Slick 自动数据库创建

scala - 有效查找重叠的 JodaTime 间隔

java - 从命令行使用 JAR 保持 JVM 运行

java - 什么是 JVM 指令?

java - Files.getLastModifiedTime() 是否泄漏内存?

scala - 可变 MultiMap 到不可变 Map

scala - 在 Intellij 中运行简单的 Scala

eclipse - 将 jars 添加到 Eclipse 插件

java - 如何更改 jar 文件的编码以管理 "█▓▒ CRIT! ░░╚╡▌▌╞╗░░"等字符?

android - 更新 VM 选项后无法在 mac 上启动 Android studio