尊重部署在Cloudfoundry或Heroku上的Gradle/Spring应用程序的代码库因子(来自12因素应用程序宣言)

bal*_*teo 9 github heroku gradle cloud-foundry 12factor

我的问题涉及12因素应用宣言的第一个因素:代码库.(见http://12factor.net/codebase).

TL; DR:

这个因素表明代码库和部署之间存在一对一的关系,所以在这种情况下,你不应该为两个应用程序使用相同的代码库(存储库)

我的要求:我有一个网站Spring应用程序和一个批处理Spring应用程序共享一个公共代码,即域模型(JPA实体类).我需要能够分享这个共同的代码.而这两个应用程序需要使用的通用代码相同的版本在任何一个时间.

我目前的设置:我目前在github上有三个"顶级"存储库:

  • 域模型(JPA实体类)repo
  • 网站应用程序回购
    • 域模型目录/ gradle项目(包括在内git subtree pull/push)
  • 批量应用程序repo
    • 域模型目录/ gradle项目(包括在内git subtree pull/push)

另请注意,域模型存储库单独存在(如上所述),但也嵌套在网站和批处理应用程序存储库中.我使用a git subtree pull/push来包含此域模型仓库作为目录和另外两个仓库中的gradle项目.原因是Heroku从repos构建代码本身.

所有这些都非常乏味且容易出错.

有人可以建议更好的解决方案吗?

Jam*_*ard 3

我会将通用代码发布到Bintray上的私有 Maven 存储库,然后将该私有存储库添加到其他消费者应用程序,并将通用模块指定为依赖项。这并不能保证两者都依赖于相同的版本,但可以使用Maven Versions Plugin等工具通过外部流程轻松管理。但您可能还希望添加更灵活的序列化系统来松散地耦合两个应用程序的域模型。