从Play框架中的另一个目录加载软件包
问题描述:
默认情况下,我的所有控制器和应用程序文件都位于app
目录中。我想保留我的应用程序特定文件在src
目录中,并使用app
获取特定于框架的代码。从Play框架中的另一个目录加载软件包
所以我有一个控制器位于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
package chat.model;
public class Message
{
public String message;
public String author;
public Message(String message, String author) {
this.message = message;
this.author = author;
}
}
Message类现在,我使用的活化剂由Lightbend喜欢玩框架建议,但我得到错误package chat.model does not exist
。我确信这是一个愚蠢的问题,但我一直在努力。
使用的IntelliJ我',我已经标记为src
来源根,和IntelliJ可以看到这个类(它不显示任何错误)
为什么它不工作?
答
发生这种情况是因为您已将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目录。最后,您还可以在Play应用程序中使用default sbt layout。