Maven 必须先获取代理插件,才能运行它
理解当 Maven 插件承诺发现代理、但其自身的构件无法解析时出现的引导问题。
对于在不同网络之间移动的笔记本电脑,自动代理插件听起来很理想。但有一个尴尬的第一个请求:Maven 可能需要代理才能获取插件本身。
只有 Maven 能够解析并加载插件的实现和所需构件之后,插件目标才会运行。该实现内部的代理发现无法帮助在实现启动之前就失败的下载。使用完全限定的插件坐标可以避免前缀查找;但它不会让插件构件出现在空的本地仓库中。
旧的 Autoproxy Maven 插件说明了这种区别。它的 README 描述了通过 proxy-vole 发现代理,但也描述了在调用其目标之前先在本地安装该插件。应把这视为那种特定设计的前提条件,而不是 Maven 普遍读取浏览器 PAC 设置的证据。
为首次解析给出明确的路径
对于仓库访问需要 HTTP 代理的网络,在该次调用所使用的 Maven 设置中配置合适的活动代理。对于允许的公共仓库引导,从HTTP 代理列表中选择一个 HTTP 候选。一个无需外部路径即可访问的已批准内部仓库也能解决最初的访问问题。无论哪种方式,都必须覆盖插件及其依赖,而不只是应用的依赖。
先前填充过的本地仓库可能掩盖引导要求。在开发者笔记本电脑上成功,并不能证明全新的 CI 账户可以启动同样的构建。在更改插件的检测逻辑之前,先查看失败的构件和阶段。
插件加载后,后续的依赖失败就成为一个独立问题:它检测到的路径是否正确,以及当前活动的 Maven 传输是否使用由此产生的设置。在决定是否值得保留自动检测时,要把这两个失败点区分开。