从Play框架中的另一个目录加载包

时间:2016-07-24 21:09:07

标签: java playframework

默认情况下,我的所有控制器和应用程序文件都位于app目录中。我想将我的应用程序特定文件保存在src目录中,并使用app来获取特定于框架的代码。

所以我在app/controllers/HomeController.java

中有一个控制器
package controllers;

import chat.model.Message;
import play.mvc.*;

import views.html.*;

public class HomeController extends Controller {
    public Result index() {
        Message message = new Message(new String("Hello world!"), new String("John"));
        return ok(index.render(message.message));
    }
}

我在src/chat/model/Message.java

中有Message类
package chat.model;

public class Message
{
    public String message;
    public String author;

    public Message(String message, String author) {
        this.message = message;
        this.author = author;
    }
}

现在,我正在使用Lightbend的激活器,就像Play框架推荐的那样,但我有错误package chat.model does not exist。我确定这是一个愚蠢的问题,但我正在努力解决它。

我正在使用IntelliJ,我将src标记为源根,IntelliJ可以看到此类(它没有显示任何错误)

为什么它不起作用?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您已将IntelliJ IDEA配置为识别新的源目录,但您尚未将此新目录添加到sbt配置中。

如何确认?在应用程序的根目录中运行以下命令:

sbt "show unmanagedSourceDirectories"

最后一行将是:

[info] List(/your/app/directory/app-2.11, /your/app/directory/app, /your/app/directory/app)

这是sbt识别的源目录列表。要添加另一个目录(src),只需follow the docs并将以下行添加到build.sbt文件中:

unmanagedSourceDirectories in Compile += baseDirectory.value / "src"

之后,将项目重新导入IntelliJ - 如果您没有使用自动导入功能 - 它将自动识别src目录。最后,您还可以使用default sbt layout作为Play应用程序。