尊重部署在 Cloudfoundry 或 Heroku 上的 Gradle/Spring 应用程序的代码库因素(来自 12 因素应用程序宣言)
Respecting the codebase factor (from 12-factor app manifesto) for a Gradle/Spring app deployed on Cloudfoundry or Heroku
我的问题与 12 因素应用程序宣言的第一个因素有关:代码库。 (参见 http://12factor.net/codebase)。
TL;DR:
这个因素表明代码库和部署之间存在一对一的关系,因此在这种情况下,您不应该为两个应用程序使用相同的代码库(存储库)
我的要求:我有一个网站 Spring 应用程序和一个批处理 Spring 应用程序都共享一个公共代码,即域模型(JPA 实体 类).我需要能够共享这个通用代码。并且两个应用程序在任何时候都需要使用相同版本的通用代码。
我当前的设置:我目前在 github 上有三个 "top-level" 存储库:
- 域模型(JPA 实体类)repo
- 网站应用回购
- 领域模型directory/gradle项目(包含在
git subtree pull/push
中)
- 批量申请回购
- 领域模型directory/gradle项目(包含在
git subtree pull/push
中)
另请注意,域模型存储库是单独存在的(如上所述),但也嵌套在网站和批处理应用程序存储库中。我使用 git subtree pull/push
以将此域模型存储库作为目录包含在内,并在其他两个存储库中包含一个 gradle 项目。这样做的原因是 Heroku 从 repos 构建代码本身。
所有这些都非常繁琐且容易出错。
有人可以建议更好的解决方案吗?
我会将域模型捆绑在一个包中(不确定 java / gradle 代表这种捆绑的是什么,在 ruby 中它将是 gem ) 并将其作为依赖项安装在生产环境中。否则 git submodule
也是一个选项
我会将通用代码发布到 Bintray and then add that private repo to the other consumer apps and specify the common module as a dependency. This doesn't guarantee that both will depend on the same version but that could be easily managed through external processes using tools like the Maven Versions Plugin 上的私有 Maven 存储库。但您可能还想添加一个更灵活的序列化系统,以松散地耦合两个应用程序的领域模型。
我的问题与 12 因素应用程序宣言的第一个因素有关:代码库。 (参见 http://12factor.net/codebase)。
TL;DR:
这个因素表明代码库和部署之间存在一对一的关系,因此在这种情况下,您不应该为两个应用程序使用相同的代码库(存储库)
我的要求:我有一个网站 Spring 应用程序和一个批处理 Spring 应用程序都共享一个公共代码,即域模型(JPA 实体 类).我需要能够共享这个通用代码。并且两个应用程序在任何时候都需要使用相同版本的通用代码。
我当前的设置:我目前在 github 上有三个 "top-level" 存储库:
- 域模型(JPA 实体类)repo
- 网站应用回购
- 领域模型directory/gradle项目(包含在
git subtree pull/push
中)
- 领域模型directory/gradle项目(包含在
- 批量申请回购
- 领域模型directory/gradle项目(包含在
git subtree pull/push
中)
- 领域模型directory/gradle项目(包含在
另请注意,域模型存储库是单独存在的(如上所述),但也嵌套在网站和批处理应用程序存储库中。我使用 git subtree pull/push
以将此域模型存储库作为目录包含在内,并在其他两个存储库中包含一个 gradle 项目。这样做的原因是 Heroku 从 repos 构建代码本身。
所有这些都非常繁琐且容易出错。
有人可以建议更好的解决方案吗?
我会将域模型捆绑在一个包中(不确定 java / gradle 代表这种捆绑的是什么,在 ruby 中它将是 gem ) 并将其作为依赖项安装在生产环境中。否则 git submodule
也是一个选项
我会将通用代码发布到 Bintray and then add that private repo to the other consumer apps and specify the common module as a dependency. This doesn't guarantee that both will depend on the same version but that could be easily managed through external processes using tools like the Maven Versions Plugin 上的私有 Maven 存储库。但您可能还想添加一个更灵活的序列化系统,以松散地耦合两个应用程序的领域模型。