2

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

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

-mainProject
      -modules
           -core
           -website1
           -website2 

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

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

谢谢

4

1 回答 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 应该将依赖项添加到您的核心项目中,您将能够从您的网站项目中调用核心项目中的方法

于 2013-04-28T02:32:11.970 回答