如果其中一个依赖项发生变化,我应该发布 Maven 库吗?
Should i release maven library if one of its dependency changed?
我的库很少,其中一些依赖于另一个。例如:
A 1.0.0
没有依赖项
B 1.0.0
取决于:A 1.0.0
问题是:
如果我发布带有 1.0.1 的 A,并且此版本向后兼容 1.0.0,我应该发布 B 吗?
这在很大程度上取决于代码的细节以及工件的部署方式,但通常,您需要发布 B 以使 A 中的代码更改可见。
- 假设 B 是一个 jar 工件,另一个客户端在该工件上有一个
<dependency>
。这意味着客户端也对 A 具有传递依赖性,但在 B 中的 <dependency>
中表示的特定版本。以您的示例为例,客户端对 B 1.0.0 具有依赖性,而 B 1.0.0 本身具有依赖于 A 1.0.0,因此客户端将传递地选择 A 1.0.0。为了向此客户端发布 A 中的错误修复,您需要发布 B 1.0.1,并将 A 上的 <dependency>
更新为指向 A 1.0.1。
- 假设 B 是部署在 Web 应用程序容器中的 war 工件。 Web 应用程序使用的每个 jar
<dependency>
都在构建的 war 的 lib
目录中。为了将 A 中的错误修复发布到此 Web 应用程序,您需要发布 B 1.0.1,并将 A 上的 <dependency>
更新为指向 A 1.0.1。
在第一个示例中(客户端依赖 B 作为 jar),一个可能的解决方法是客户端通过在 A 上添加自己的显式 <dependency>
来覆盖 A 的版本,也许使用一个版本灵活选择最新发布版本的范围。但这可能会导致维护陷阱,因为这意味着客户端正在将 A 版本和 B 版本组合在一起,而这两个版本没有一起作为 B 构建的一部分进行测试。一般来说,最好释放B,但如果很难释放B,那么这可能是一个可行的短期解决方法。
此处提供了有关传递依赖项和版本范围语法的更多详细信息:
我的库很少,其中一些依赖于另一个。例如:
A 1.0.0 没有依赖项
B 1.0.0 取决于:A 1.0.0
问题是:
如果我发布带有 1.0.1 的 A,并且此版本向后兼容 1.0.0,我应该发布 B 吗?
这在很大程度上取决于代码的细节以及工件的部署方式,但通常,您需要发布 B 以使 A 中的代码更改可见。
- 假设 B 是一个 jar 工件,另一个客户端在该工件上有一个
<dependency>
。这意味着客户端也对 A 具有传递依赖性,但在 B 中的<dependency>
中表示的特定版本。以您的示例为例,客户端对 B 1.0.0 具有依赖性,而 B 1.0.0 本身具有依赖于 A 1.0.0,因此客户端将传递地选择 A 1.0.0。为了向此客户端发布 A 中的错误修复,您需要发布 B 1.0.1,并将 A 上的<dependency>
更新为指向 A 1.0.1。 - 假设 B 是部署在 Web 应用程序容器中的 war 工件。 Web 应用程序使用的每个 jar
<dependency>
都在构建的 war 的lib
目录中。为了将 A 中的错误修复发布到此 Web 应用程序,您需要发布 B 1.0.1,并将 A 上的<dependency>
更新为指向 A 1.0.1。
在第一个示例中(客户端依赖 B 作为 jar),一个可能的解决方法是客户端通过在 A 上添加自己的显式 <dependency>
来覆盖 A 的版本,也许使用一个版本灵活选择最新发布版本的范围。但这可能会导致维护陷阱,因为这意味着客户端正在将 A 版本和 B 版本组合在一起,而这两个版本没有一起作为 B 构建的一部分进行测试。一般来说,最好释放B,但如果很难释放B,那么这可能是一个可行的短期解决方法。
此处提供了有关传递依赖项和版本范围语法的更多详细信息: