Maven、微服务、(通用)模块
Maven, Microservices, (Common) Modules
我遇到的问题很标准:我需要在微服务之间有一些通用的代码库,尽管我听说这种方法是不鼓励的。目前,我将通用代码作为单独的模块内置到 jar 中并部署到本地 Nexus。然后它被用作标准的 maven 编译依赖项。我们使用 CI 来构建所有模块。因此,当我想更改公共代码并将其完全用于微服务时,我做不到。当我第一次推送公共模块更改时,我必须经过 "two-stage process",等到模块构建并接收新版本;只有这样我才能推送使用该新版本的微服务代码。至少这很尴尬,实际上很烦人。
我可以在 Maven 中将通用模块用作某种 "source dependency" 吗?实现它的正确方法是什么?
重要的问题是:不同的微服务可以使用 不同 版本的通用 jar 吗?
如果是:您不需要推送更改。你更新你的公共 jar 并单独测试它(尽可能)。在更新微服务时,您可以更新依赖项(如果需要)。然后,微服务 运行(可能)您常用 jar 的不同版本。
如果不是:你可以把你的jar连同所有的微服务放在一个多模块项目中,但这意味着它们每次都必须一起构建。您不能再更改和构建一个。但是,如果它们依赖于同一版本中的公共代码,它们就会紧密耦合,因此无论如何只构建一个可能不是一个好主意。
我遇到的问题很标准:我需要在微服务之间有一些通用的代码库,尽管我听说这种方法是不鼓励的。目前,我将通用代码作为单独的模块内置到 jar 中并部署到本地 Nexus。然后它被用作标准的 maven 编译依赖项。我们使用 CI 来构建所有模块。因此,当我想更改公共代码并将其完全用于微服务时,我做不到。当我第一次推送公共模块更改时,我必须经过 "two-stage process",等到模块构建并接收新版本;只有这样我才能推送使用该新版本的微服务代码。至少这很尴尬,实际上很烦人。
我可以在 Maven 中将通用模块用作某种 "source dependency" 吗?实现它的正确方法是什么?
重要的问题是:不同的微服务可以使用 不同 版本的通用 jar 吗?
如果是:您不需要推送更改。你更新你的公共 jar 并单独测试它(尽可能)。在更新微服务时,您可以更新依赖项(如果需要)。然后,微服务 运行(可能)您常用 jar 的不同版本。
如果不是:你可以把你的jar连同所有的微服务放在一个多模块项目中,但这意味着它们每次都必须一起构建。您不能再更改和构建一个。但是,如果它们依赖于同一版本中的公共代码,它们就会紧密耦合,因此无论如何只构建一个可能不是一个好主意。