前言
今天小编,想看下maven的最新版本,然后,打开maven的官网,发现最新版本是3.8.6了。感叹时光匆匆啊,没几年的时间更新了这么多个版本,小编还在使用3.6.3版本。下图是官网的发布历史。
为什么没有3.7版本呢
有没有发现一个问题,从2019-11-25日发布了3.6.3版本后,2021-04-04日直接就到了3.8.1版本。3.7呢?被吃了么。于是乎,小编开始查找原因。最终在3.8.1版本的发行说明中找到了。
- 为什么不是 3.6.4?
这不仅仅是一个错误修复,因为它包含三个导致默认行为更改的功能(外部 HTTP 不安全 URL 现在默认被阻止):如果您使用现在被阻止的存储库,则使用这个新的 Maven 版本时您的构建可能会失败。请在升级前检查并最终修复。 - 为什么不是 3.7.0?
Apache Maven 3.7.0 过去曾宣传它将是第一个您可以选择激活构建/消费者功能的版本:包含此功能的版本已重命名为 4.0.0。重用 3.7.0 可能会导致混淆,因此我们选择了下一个可用的次要版本。 - 为什么不是 3.8.0?
每个版本都有一个 72 小时以上的投票期。在 3.8.0 的投票过程中发现了一个错误,这个错误足以取消投票。使用 Maven,我们会刻录版本,以确保我们总是在谈论相同的版本。这样就永远不会混淆使用的是哪个 Maven 3.8.0。
所以,为啥直接到了3.8.1版本就比较明朗了。这里也暴露出一个问题,就是如果依赖包中使用了http不安全的url,则在构建的时候会报错。
当我的 HTTP 存储库被阻止时如何解决?
- 如果存储库是在您的 pom.xml 中定义的,请在您的源代码中修复它。
- 如果存储库是在您的一个依赖项 POM 中定义的,您将收到如下消息:
[ERROR] Failed to execute goal on project test: Could not resolve dependencies for project xxx: Failed to collect dependencies at my.test:dependency:version -> my.test.transitive:transitive:version: Failed to read artifact descriptor for my.test.transitive:transitive:jar:version: Could not transfer artifact my.test.transitive:transitive:pom:version from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [blocked-repository-id (http://blocked.repository.org, default, releases+snapshots)]
要修复的选项是:
- 将依赖版本升级到更新版本,用 HTTPS 替换过时的 HTTP 存储库 URL
- 保留依赖版本,但在您的设置中定义一个镜像。
总结
之所以,直接到了3.8.1版本,主要原因还是新增了三个导致默认行为更改的功能,比如说存储库必须使用https。
针对解决办法,如果将依赖升级可以搞定,那直接升级最好了;如果需要保留版本,配置镜像,那还不如退回到3.6.3来的实在。
|