我有两个项目,使用的是PlayFramework 2.4开发。虽然它们在概念上完全不同,但它们共享一些常见功能,例如演化管理(Liquibase),CRUD管理机制,通知(电子邮件,短信)机制等。因此,决定将每个项目拆分为2个模块:公共“核心”模块,其中包含所有描述的逻辑,以及“项目”模块,其中包含特定于项目的服务、模板、视图。
在Play Framework中实现这一点的推荐方法是“子项目”概念。但由于至少两个原因,这显然不是一个选项:
- 这些项目由不同的团队开发,因此它们不能位于一个目录结构中
- 这3个模块(“core”和2个“project”模块)必须在单独的VCS存储库(Mercurial)中进行版本控制
我的当前解决方案是创建核心模块,并在“项目”Play应用程序中提供它作为依赖项。尽管这种方法部分有效,但存在重大缺点:
- 如果在模块中添加路由文件,则会覆盖项目路由文件
- 您无法将视图放置在核心模块中,因为由于图1,您无法访问公共资产
- 由于缺点n.1和2,您无法将控制器放置在核心模块中,因为您无法指定要呈现的视图
- 静态资源(public目录)不包含在模块发布中
我被迫将常见模板复制到两个项目中,实际上我几乎不能编写常见控制器,这非常烦人。
感谢任何帮助。也许可以通过高度定制的构建和发布过程来实现核心模块?