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

问题描述 投票:2回答:1

我正在尝试建立2个使用播放框架2(JAVA)使用相同核心功能的网站。 挑战在于如何设置项目,以便核心部分可以在两个项目之间共享。 在游戏1中,我们可以有一个通用模块,并由应用程序将其池中,但是我找不到使用游戏2进行此操作的方法。我知道我可以创建一个模块目录并将核心代码放在其中,但是不会对我而言,这是一个理想的解决方案,因为模块中的代码需要与多个项目共享。 有谁知道如何解决这个问题?

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

-mainProject
      -modules
           -core
           -website1
           -website2 

但是问题是我无法从其他模块内部的代码中调用内核中的函数。 再加上不便的是,我保留了多个构建文件和路由文件,并且根据我要构建的网站,我将其重命名。

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

谢谢

playframework-2.0 sbt
1个回答
1
投票

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

您可以做什么来制作3个不同的Play项目,每个分别用于Core,Website1和Website2。 由于您需要“导出”核心项目,因此可以使用Maven做到这一点。

在Core项目中,创建一个pom.xml(Maven构建文件),该文件可以将Core项目打包为JAR 。 然后,您运行mvn install:install将核心JAR安装在本地存储库中,然后可以在其他网站项目中使用它。 (附带说明,这里有一个Maven-Play桥 ,您可能会觉得有用)

现在,在Website1和Website2 Play项目中,您将在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应该将依赖项添加到您的Core项目中,并且您将能够从网站项目中调用Core项目中的方法

© www.soinside.com 2019 - 2024. All rights reserved.