【发布时间】:2015-09-07 03:16:21
【问题描述】:
我使用以下命令创建了一个 play-java Web 应用程序:
activator new "c:\workspace\PlayServer"
我在 Eclipse 中工作,并在同一个工作区中创建了另一个名为“Common”的 java 项目(常规 java 项目)。
现在,我有以下项目结构:
c:\workspace
\--- Common (Java project)
\--- src
\--- comm
\--- messages
\--- PlayServer (Play-java 2.4.0 web application project)
\--- app/controllers
\--- app/views
\--- conf
\--- project
我想在“PlayServer”访问“Common”项目的类。 在 Eclipse 中 - 我已将“Common”项目依赖项添加到 play 应用程序项目的 Java 构建路径中,并且所有项目都已成功构建,我可以在“PlayServer”play 应用程序项目中访问“Common”的所有类.
但是,当我使用 activator run 命令运行或调试“PlayServer”时,
我收到错误:
[错误] c:\workspace\PlayServer\app\controllers\Application.java;6
错误:comm.messages.WebMessage 包不存在
[错误] 导入 comm.messages.WebMessage
这意味着 playframework 找不到“Common” java eclipse 项目的类。
在搜索了很多关于这个问题后,我发现一般来说,有3个解决方案:
1.发布到我的外部java项目到Ivy,并在play项目的build.sbt文件中解析如下:
libraryDependencies ++= Seq(
// Adding it here somehow..
)
但我没有找到任何简单的教程可以指导我如何发布我的外部 java 项目并在 play 项目的 build.sbt 文件中解决它。
构建 sbt 文件对我来说有点神秘。
2.直接引用我的外部项目,在play项目的build.sbt中。
我尝试在我的 build.sbt 中执行以下操作 - 这也没有真正起作用:
// 选项 1:
lazy val core = ProjectRef(file("../Common"), "Common")
lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(common )
// 选项 2:
lazy val common = RootProject(file("../common"))
lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(common )
// 选项 3:
lazy val common = file("../common").getAbsoluteFile.toURI
lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(common )
我在 SBT 文档中阅读了我应该在“Common”项目中添加一个 "build.sbt" 文件,但我不知道在其中声明什么。
如果“通用”项目也必须是 SBT 项目,我知道所有 Java 源都应该在:"/src/main/java" 但我在 SBT 文档中看到它是可配置的.所以,主要问题是我仍然无法让我的外部 java 项目被我的 play web 应用程序编译和识别。
现在我只是在 "Common" 项目目录中创建了一个空的 build.sbt 文件。
3. 在我的 play 项目的根目录中创建一个 lib/ 目录,然后将 jar 文件添加到该目录。此解决方案将要求我的每个外部 Java 项目(如“Common”)都需要在每次构建中自动创建“jar”文件,并将生成的 jar 复制到我的 “PlayServer” lib 目录。另外,我读到“lib”解决方案适用于非托管依赖,因此我不确定这个解决方案是否有效和正确,因为 play 框架使用 SBT 和常春藤。
我的问题是:
哪种方法最受推荐和推荐使用?
我该如何实施?
我没有成功找到关于这个问题的任何最佳实践或任何可以演示如何执行上述任何解决方案的基本教程。
【问题讨论】:
-
有人吗?将不胜感激。
标签: java eclipse playframework sbt dependency-management