我有两个spring boot REST API,它们都有完全相同的/ health端点,我想将此端点提取到其他Java项目中。
我想要以下事情:
当我编译任何API时,应该编译通用模块
我正在使用docker容器在单独的docker中运行这些API。如何将通用代码的jar文件复制到Docker中。
如果这个问题看起来很愚蠢,请忽略,我不确定是将普通项目作为模块还是作为依赖项注入这两个项目的pom文件中。
答案 0 :(得分:1)
您可以结合使用Maven和构建服务器(Jenkins等)和巧妙的管道。将您的公共依赖性作为模块,每当您在一个REST项目上启动构建时,就会发生以下情况:
mvn versions:use-latest-releases -Dincludes=groupId:artifactId
),这将更新REST模块的pom 如果要认真管理重大更改,版本化模块就很重要,否则您可以摆脱SNAPSHOTS
答案 1 :(得分:1)
Maven可以完成此任务。
我想要以下事情:
当我编译任何API时,应该编译通用模块
Maven多模块pom(也称为聚合器pom)实现了这一目标。
1)在构建方面耦合三个组件
- api-parent (multimodule pom and parent pom also if needed) | |____ common-lib (jar) |____ api-foo (spring boot fat jar) |____ api-bar (spring boot fat jar)
此方法的缺点是common-lib
的版本对于使用它的两个api模块必须相同。但是,由于您希望在任何api的每次构建时都编译common-lib
,因此最终是有道理的。
您可以在希望/需要common-lib
的版本在api之间相同时使用这种方法。如果稍后发现您的api使用的common-lib
的版本应该有所不同,因为它们的生命周期不同,则可以按照以下说明对其进行解耦。
2)从构建上解耦这三个组件
在同一级别上,定义common-lib
项目和两个apis项目,并在每个api项目中定义对common-lib
的依赖关系。
- common-lib (jar) - api-foo (spring boot fat jar) | |____uses___ common-lib v1 (jar) - api-bar (spring boot fat jar) | |____uses___ common-lib v2 (jar)
我正在使用docker容器在单独的docker中运行这些API。 如何将通用代码的jar文件复制到Docker中。
您不会自己复制该库。 spring boot maven插件会为您创建胖子jar,该胖子jar包含您声明的所有依赖关系以及微服务所需的依赖关系。因此,只需将Spring Boot创建的jar部署在您的docker容器上即可。
旁注:
在这两种方法中,我认为您应该在同一个SCM存储库中定义这三个项目(单存储库方法而不是多存储库方法),因为这三个组件在功能上是耦合的。您可能希望同时处理所有这些内容。