我使用以下命令创建了一个play-java web应用程序:
激活器新的“c:\工作区\PlayServer”
我在Eclipse中工作,并在同一个工作区中创建了另一个名为“”的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“中的”公共“项目类。在Eclipse中,我将“公共”项目依赖项添加到play应用程序项目的Java路径中,所有项目都已成功构建,并且我可以在"PlayServer“play应用程序项目中访问"Common”的所有类。
但是,当我使用激活程序run命令运行或调试"PlayServer“时,我正在检查错误:错误
错误:包comm.messages.WebMessage不存在
错误导入comm.messages.WebMessage
这意味着运行框架无法找到“公共”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文档中读到了应该添加到“公共”项目中的"build.sbt"文件,但是我不知道在其中声明什么。如果“公共”项目也必须是一个SBT项目,我知道所有的java源都应该在:"/src/main/java"中,但是我在SBT文档中看到它是可配置的。因此,的主要问题是仍然无法使我的外部java项目被我的play web应用程序编译和识别。
现在,我刚刚在“公共”项目目录下创建了一个空的build.sbt文件。
3.在play项目的根目录中创建一个lib/目录,然后将jar文件添加到该目录中。此解决方案将要求我的每个外部java项目(如"Common“)都需要在每次构建中自动创建"jar”文件,并将生成的jar复制到我的"PlayServer" lib目录中。此外,我还读到过"lib“解决方案是针对非托管依赖项的,因此我不确定该解决方案是否有效和正确,因为play框架将SBT与ivy.一起使用。
,我的问题是:,哪种方法是最受欢迎和推荐使用的?我怎样才能实现呢?
我没有成功地找到关于这个问题的任何最佳实践,也没有找到任何可以演示如何执行上述解决方案的基本教程。
发布于 2015-06-21 17:04:12
我发现这种方法很好地遵循了文档,它解释了打包单独项目的结构、播放用途。
两个带有Git的存储库,一个用于common,一个用于PlayServer。将Common签出到自己的工作区,但也将其签出到名为modules的文件夹中的PlayServer工作区中:
c:\workspace
\--- Common (checked out from Git)
\--- src
\--- comm
\--- messages
\--- PlayServer (Play-java 2.4.0 web application project)
\--- app/controllers
\--- app/views
\--- conf
\--- project
\--- modules
\--- Common (checked out from Git)
\--- src
\--- comm
\--- messages(请注意如何两次将Common签出到它自己的工作区以及PlayServer/modules中。)
在.gitignore的PlayServer应用程序中,您可以告诉它忽略modules\Common,因为它有自己的Git存储库。
文档解释了如何让modules/Common和PlayServer作为单独的项目一起工作,还有一个GitHub上的样本展示了Play的子项目如何工作。注意,这个示例使用Play 2.3,但是2.4的迁移指南没有提到任何更改,因此可以采取相同的步骤。
更新(见评论)
Build.sbt应该是这样的:
lazy val root = project.in(file("."))
.aggregate(common)
.dependsOn(common)
lazy val common = project.in(file("../common"))根据我上面链接到的示例,所有其他内容都是一样的。
https://stackoverflow.com/questions/30966936
复制相似问题