Main方法适用于java,但不适用于scala



我在intellij中有一个模块,在那里我可以在java中创建运行良好的主方法,但当我在scala中创建它们并尝试运行它们时,我会得到以下结果:

Error: Could not find or load main class xxx

我的项目同时依赖于java和scala类。我需要做些什么才能允许scala主类运行?

编辑:

根据要求,以下是我尝试使用scala运行的主要类的摘录。我知道代码没有错,因为当我将intellij中的代码初始化为scala项目时,它就可以工作了。这里的问题是,我从一个空白项目开始,所以我不知道magic intellij在幕后做了什么来使scala主类正常运行。

object WebProxyServer extends Logging {
def main(args: Array[String]): Unit = {
// implementation
}
}
class WebProxyServer() {
}

运行Scala代码的最简单方法是创建一个扩展Appobject,如下所示:

object Main extends App {
println("Hello World")
}

Scala将在创建对象时执行对象中的所有代码。(参数在Appargs成员中可用)

要从IntelliJ运行此程序,请选择"运行->编辑配置",然后单击"+"并选择"应用程序"并填写对话框。"Main Class"参数的下拉列表应包括扩展App的所有对象,因此请选择要运行的类。完成此操作后,您的Main应出现在"Run"(运行)菜单上。

可以有多个扩展App的类和Run菜单中的多个项目。我使用它从IDE调试代码的特定部分,而不必运行主程序。


您也可以使用main方法创建对象,如下所示:

object Main {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}

一旦构建完成,您就可以如上所述在IntelliJ中将Main添加为"主类"。所有具有main方法的对象也将显示在"Main Class"下拉列表中。

这两种方法都是可以接受的,但不要将两者结合起来。也就是说,不要从App继承,然后重写App中的main方法。

要将Scala代码添加到Intellij中现有的Java模块中,右键单击模块名称(通常是项目视图中的顶级文件夹),然后单击"添加框架支持",然后在选项列表中选中Scala。

要将Scala代码添加到Intellij项目中的新模块,请转到File->NewModule,然后从选项列表中选择Scala。

如果您的目录结构如下:

src
|
|-main
|
|-java
| |-....java packages
|
|-scala
|-....scala packages

然后不要忘记在项目视图中右键单击您的scala目录,然后选择将目录标记为->源根

首先尝试检查IDE的SDK配置,如果这会导致错误。

object WebProxyServer {
def main(args: Array[String]): Unit = {}
}

如果需要,请尝试extends Appoverride您的main(args: Array[String])

确保将主方法添加到对象,而不是类。主要方法需要是静态的。如果您想将主方法添加到现有类中,则可以添加一个伴随对象,该对象只是一个与类同名的对象,以包含主方法。

class MyApp {
// bad main method; will not run
def main(args: Array[String]): Unit = println("hello world")
}
// companion object to MyApp class
object MyApp {
// good main method; will run fine
def main(args: Array[String]): Unit = println("hello world")
}

相关内容

  • 没有找到相关文章

最新更新