首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Play Framework2.4.0-如何将外部java项目依赖项添加到play-java应用程序项目

Play Framework2.4.0-如何将外部java项目依赖项添加到play-java应用程序项目
EN

Stack Overflow用户
提问于 2015-06-21 16:43:14
回答 1查看 1.3K关注 0票数 0

我使用以下命令创建了一个play-java web应用程序:

激活器新的“c:\工作区\PlayServer”

我在Eclipse中工作,并在同一个工作区中创建了另一个名为“”的java项目(普通项目)。

现在,我有以下项目结构:

代码语言:javascript
复制
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文件中解析如下:

代码语言:javascript
复制
libraryDependencies ++= Seq(
  // Adding it here somehow..
)

但是我没有找到任何简单的教程来指导我如何发布我的外部java项目并在play项目的build.sbt文件中解析它。构建sbt文件对我来说有点神秘。

2.直接引用我的外部项目,在play项目的build.sbt中。我试着在我的build.sbt -上做了以下工作,但它也没有真正起作用:

//备选案文1:

代码语言:javascript
复制
lazy val core = ProjectRef(file("../Common"), "Common")
lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(common )

//备选方案2:

代码语言:javascript
复制
lazy val common = RootProject(file("../common"))
lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(common )

//备选方案3:

代码语言:javascript
复制
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.一起使用。

,我的问题是:,哪种方法是最受欢迎和推荐使用的?我怎样才能实现呢?

我没有成功地找到关于这个问题的任何最佳实践,也没有找到任何可以演示如何执行上述解决方案的基本教程。

EN

回答 1

Stack Overflow用户

发布于 2015-06-21 17:04:12

我发现这种方法很好地遵循了文档,它解释了打包单独项目的结构、播放用途。

两个带有Git的存储库,一个用于common,一个用于PlayServer。将Common签出到自己的工作区,但也将其签出到名为modules的文件夹中的PlayServer工作区中:

代码语言:javascript
复制
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中。)

.gitignorePlayServer应用程序中,您可以告诉它忽略modules\Common,因为它有自己的Git存储库。

文档解释了如何让modules/CommonPlayServer作为单独的项目一起工作,还有一个GitHub上的样本展示了Play的子项目如何工作。注意,这个示例使用Play 2.3,但是2.4的迁移指南没有提到任何更改,因此可以采取相同的步骤。

更新(见评论)

Build.sbt应该是这样的:

代码语言:javascript
复制
lazy val root = project.in(file("."))
  .aggregate(common)
  .dependsOn(common)

lazy val common = project.in(file("../common"))

根据我上面链接到的示例,所有其他内容都是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30966936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档