Play框架项目组成

10

我有两个项目,使用的是PlayFramework 2.4开发。虽然它们在概念上完全不同,但它们共享一些常见功能,例如演化管理(Liquibase),CRUD管理机制,通知(电子邮件,短信)机制等。因此,决定将每个项目拆分为2个模块:公共“核心”模块,其中包含所有描述的逻辑,以及“项目”模块,其中包含特定于项目的服务、模板、视图。

在Play Framework中实现这一点的推荐方法是“子项目”概念。但由于至少两个原因,这显然不是一个选项:

  1. 这些项目由不同的团队开发,因此它们不能位于一个目录结构中
  2. 这3个模块(“core”和2个“project”模块)必须在单独的VCS存储库(Mercurial)中进行版本控制

我的当前解决方案是创建核心模块,并在“项目”Play应用程序中提供它作为依赖项。尽管这种方法部分有效,但存在重大缺点:

  1. 如果在模块中添加路由文件,则会覆盖项目路由文件
  2. 您无法将视图放置在核心模块中,因为由于图1,您无法访问公共资产
  3. 由于缺点n.1和2,您无法将控制器放置在核心模块中,因为您无法指定要呈现的视图
  4. 静态资源(public目录)不包含在模块发布中

我被迫将常见模板复制到两个项目中,实际上我几乎不能编写常见控制器,这非常烦人。

感谢任何帮助。也许可以通过高度定制的构建和发布过程来实现核心模块?

1个回答

1
我认为你不应该将核心项目作为其他两个项目的依赖项添加。你可以将核心项目分解为核心类和核心资源。Play框架中的模板和视图是编译后的类,因此你可以将它们打包成一个jar文件。你创建的模板将与核心类一起打包(或者你也可以将它们分开)。你可以将这些jar文件发布到像Artifactory或Nexus这样的依赖应用程序中,并在其他项目中导入它们。对于资源,你可以像webjars一样打包它们。这样你就可以从其他项目的任何视图中访问它们。

非常感谢,这是一个有趣的想法,但您是否有一些具体的示例来解决将编译和打包资源(如视图)放在单独的jar中的问题? - YoZH
你的视图应该在一个单独的项目中。如何重用你的视图?关于如何打包,请参阅此链接:http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Publishing.html。 - Augusto
我有一组常见的视图和静态资源(例如css、js、img),这些视图使用这些资源。我还有一些核心类和控制器,它们调用这些视图。因此,我的目标是以某种方式打包它们,以便我不需要将它们复制到所有想要使用它们的项目中。实际上,这些视图和资源形成了一个对所有项目都通用的管理界面。 - YoZH
嘿,我在文档中找到了你想做的事情:D https://www.playframework.com/documentation/2.1.0/SBTSubProjects - Augusto
子项目的问题在于我无法将它们存储在单独的版本控制系统根目录中,或者这样做太复杂了。而且我一定需要将它们分开。 - YoZH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接