Playframework 2.0 如何在play framework 2中共享模块

Playframework 2.0 如何在play framework 2中共享模块,playframework-2.0,sbt,Playframework 2.0,Sbt,我正在尝试使用PlayFramework2(JAVA)构建2个使用相同核心功能的网站。挑战在于如何设置项目,以便核心部分可以在两个项目之间共享。在Play1中,我们可以有一个公共模块,并通过应用程序将其汇集在一起,但我无法找到使用Play2实现这一点的方法。我知道我可以创建一个模块目录并将核心代码放在那里,但这对我来说不是一个理想的解决方案,因为模块中的代码需要与多个项目共享。有人知道如何解决这个问题吗 到目前为止,我试图通过创建一个包含3个模块的项目来解决这个问题,一个是核心模块,另一个是网站

我正在尝试使用PlayFramework2(JAVA)构建2个使用相同核心功能的网站。挑战在于如何设置项目,以便核心部分可以在两个项目之间共享。在Play1中,我们可以有一个公共模块,并通过应用程序将其汇集在一起,但我无法找到使用Play2实现这一点的方法。我知道我可以创建一个模块目录并将核心代码放在那里,但这对我来说不是一个理想的解决方案,因为模块中的代码需要与多个项目共享。有人知道如何解决这个问题吗

到目前为止,我试图通过创建一个包含3个模块的项目来解决这个问题,一个是核心模块,另一个是网站

-mainProject
      -modules
           -core
           -website1
           -website2 
但问题是,我无法从其他模块中的代码调用内核中的函数。另外,不方便的是,我保留了多个构建文件和路由文件,并且根据我想要构建的网站,我将它们重命名

请注意,核心需要在控制器中有自己的路由和操作


谢谢

我认为Play没有内置多模块支持,但您可以在Play的基础上使用Maven构建一个解决方案

您可以做什么来制作3个不同的播放项目,核心、网站1和网站2各一个。因为您需要“导出”核心项目,所以可以使用Maven来完成

在核心项目中,创建一个pom.xml(Maven构建文件),该文件可以。然后运行以在本地存储库中安装核心JAR,然后可以在其他网站项目中使用。 (旁注,这里有一个你可能会觉得有用的例子)

现在,在Website1和Website2Play项目中,您将在Build.scala文件中向这个JAR添加一个。您可以将其添加到appDependencies

val appDependencies = Seq(
    "your-core-project-artifact-name" % "your-core-project-project-name" % "1.0.0.0",
    "javax.mail" % "mail" % "1.4" // Existing libraries
)
最后,在Website1和Website2项目中添加本地存储库(安装核心项目的地方)作为解析器

resolvers += (
    "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
)

给你。当您构建Website1/Website2项目时,Play应该将依赖项添加到您的核心项目中,并且您将能够从您的网站项目中调用核心项目中的方法

如果您有一个完整的Play项目,并且希望在其他网站中重用,这在概念上是一种方法。但是你不必介绍Maven。您可以从
core
运行
publish local
任务,将其发布到本地播放存储库。然后,您可以将其作为依赖项列在您的网站项目中,如上所述,而无需添加其他存储库。作为后续评论,我在过去尝试过这样做,但没有成功。我遇到的一个问题是加载路由文件。使用此设置,您将拥有一个带有
路由
文件的主网站应用程序,以及一个带有另一个
路由
文件的核心JAR。我发现在启动我的网站项目时,我的核心路线将胜过我的网站路线,因此将是我的网站唯一可用的路线。然而,当时我在Play 2.0中工作,在Play 2.1中可能有办法解决这个问题。@avik,谢谢,在您提出的解决方案中,该模块将是一个完全独立的Play模块,还是会放在项目中的模块目录下?@nightograph-如@PowerPanda的回答中所述,
core
website1
website2
是完全独立的播放项目。