1

在学习了一些教程之后,我想建立自己的与 Akka 聊天来玩一点。为了让事情变得更加困难,我也在尝试使用 IntelliJ IDEA 以及经过几年的 Eclipse。

我设置了一个简单的 POM 来获取 akka-cluster,启用自动导入并设置 IDEA 以支持 Scala(通过右键单击项目并在“框架支持”下启用 Scala);我已经写了几行代码来开始工作。奇怪的是,当代码编译并正确运行(打印“hello, world”并退出)时,IDEA 报告我的代码有问题(我预计会导致编译失败的错误)。

这是我的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>akka-chat-sim</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.10.4</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-actor_2.10</artifactId>
            <version>2.3.7</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-cluster_2.10</artifactId>
            <version>2.3.7</version>
        </dependency>
    </dependencies>

</project>

这是代码:

package com.example.tutorials.akka.chat

import akka.actor.{Props, ActorLogging, Actor, ActorSystem}

class Foo extends Actor with ActorLogging {
  def receive = {
    case s: String => {
      log.info(s)
      context.system.shutdown()
    }
  }
}

object Main extends App {

  val system = ActorSystem("foo")
  val foo = system.actorOf(Props[Foo], "foo")

  foo ! "hello, world"

}

IntelliJ IDEA 说 ActorSystem 导入是未使用的(尽管它被使用了),并且在几行之后它说它无法解析 ActorSystem.apply (尽管它确实如此,因为它可以正确编译和运行)。

此外,它突出显示了 Foo 的接收方法的右大括号,告诉我Expression of type Unit doesn't conform to expected type BoxedUnit.

我错过了什么?非常感谢你。

4

2 回答 2

1

我拿走了您的pom.xml源文件并按照您描述的相同步骤进行操作。我无法重现该问题。正如您所报告的那样,代码编译并运行良好,但 IntelliJ 也没有报告任何问题(除了一个关于冗余大括号的检查警告)。

您正在运行什么版本的 IntelliJ 和 Scala 插件?Scala 插件的最新版本比旧版本有很大改进。

您可以尝试使缓存无效以强制重新构建索引(文件>使缓存无效/重新启动...)

我正在运行的版本:

  • IntelliJ 14.0.2(终极版)
  • 斯卡拉插件 1.1.3

此外,如果您使用的是 IntelliJ 14,请确保您没有将任何 Play 插件或 SBT 插件与 Scala 插件一起使用。Scala 插件的最新版本包括对 Play 和 SBT 的支持,因此不需要其他与​​ Scala 相关的插件。

尽管我发现在您的文件中使用 Maven 没有问题,但另一个建议可能是从类型安全激活器模板开始akka-sample-cluster-scala,并在启用 Scala 插件的情况下将其作为sbt项目在 IntelliJ 中打开。大多数 Scala 项目使用sbt构建工具而不是 Maven。

于 2014-12-08T20:11:44.223 回答
0

最终,罪魁祸首似乎是我在尝试将我正在学习的所有 Akka 教程捆绑为单个项目的模块时创建的 .idea 文件夹。

正如 Eric 在他的回复中建议的那样,我注意到了它,删除了它并清除了 IntelliJ 的缓存。这样做后,我重新启动了 IntelliJ,一切恢复正常。

于 2014-12-08T22:34:45.917 回答