如何在play框架2中共享模块

时间:2013-04-22 21:18:57

标签: playframework-2.0 sbt

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

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

-mainProject
      -modules
           -core
           -website1
           -website2 

但问题是我不能从其他模块内的代码调用核心中的函数。加上不方便我保留多个构建文件和路由文件,并根据我想要构建的网站,我重命名它们。

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

谢谢

1 个答案:

答案 0 :(得分:1)

我不认为Play内置了多模块支持,但您可以在Play上使用Maven破解解决方案。

你可以做些3个不同的Play项目,分别用于Core,Website1和Website2。由于您需要“导出”核心项目,因此您可以使用Maven来执行此操作。

在Core项目中,您可以创建一个可以package the Core project as a JAR的pom.xml(Maven构建文件)。然后运行mvn install:install以在本地存储库中安装核心JAR,然后可以在其他网站项目中使用它。 (旁注,你可能会发现有用的Maven-Play bridge here

现在,在您的Website1和Website2 Play项目中,您将在Build.scala文件中向此JAR添加dependency。您将其添加到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应该将依赖项添加到您的Core项目中,并且您将能够从您的网站项目调用Core项目中的方法