10

我的问题与 12 要素应用程序宣言的第一个要素有关:代码库。(见http://12factor.net/codebase)。

TL;博士:

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

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

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

  • 领域模型(JPA 实体类)回购
  • 网站应用程序仓库
    • 领域模型目录/gradle 项目(包含在 中git subtree pull/push
  • 批处理应用程序仓库
    • 领域模型目录/gradle 项目(包含在 中git subtree pull/push

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

所有这些都非常繁琐且容易出错。

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

4

2 回答 2

3

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

于 2016-01-18T23:54:44.977 回答
-1

我会将域模型捆绑在一个包中(不确定 java / gradle 对此类包的说法是什么,在 ruby​​ 中它将是一个 gem)并将其作为依赖项安装在生产中。否则 agit submodule也是一个选项

于 2015-12-17T10:31:48.813 回答