主要方法适用于Java,但不适用于Scala

时间:2019-01-24 17:51:00

标签: java scala intellij-idea main

我在intellij中有一个模块,可以在Java中创建可以完美运行的主要方法,但是当我在scala中创建它们并尝试运行它们时,我得到以下信息:

Error: Could not find or load main class xxx

我的项目同时依赖于Java和Scala类。我该怎么做才能允许Scala主类运行?

编辑:

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

object WebProxyServer extends Logging {

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

        // implementation

    }

}

class WebProxyServer() {

}

4 个答案:

答案 0 :(得分:4)

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

strtol, strtoul, strtod, etc...

Scala在创建对象时将执行该对象中的所有代码。 (参数在object的{​​{1}}成员中可用)

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

您可以具有扩展args的多个类和App菜单中的多个项目。我用它来从IDE调试代码的特定部分,而无需运行主程序。


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

Main

一旦构建完成,您就可以如上所述将App添加为IntelliJ中的“主类”。所有具有Run方法的对象也将出现在“ Main Class”下拉菜单中。

两种方法都可以接受,但不要将两者结合。也就是说,请勿继承自main,然后覆盖object Main { def main(args: Array[String]): Unit = { println("Hello World") } } 中的Main方法。

答案 1 :(得分:2)

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

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

如果您的目录结构如下:

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

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

答案 2 :(得分:0)

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

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")
}

答案 3 :(得分:0)

首先尝试检查IDE的SDK配置,如果这会导致您出错,则

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

然后根据需要尝试extends Appoverride main(args: Array[String])