选择替代货车供应商的指南

默认情况下,Maven 使用 JDK 提供的java.net.URLConnection( HttpURLConnection) 类来访问使用 HTTP/HTTPS 协议的存储库。不幸的是,由于此实现包含某些错误,Maven 用户可能会发现自己无法连接到需要某些配置的服务器。一些奇怪行为的例子包括当密码很长时对 Authorization 标头的 Base64 值进行换行,以及在抢占式身份验证中使用缓存值来连续连接到同一服务器。

Maven 2.2.0 试图通过切换到基于 Apache HttpClient 的 Wagon 实现来修正这个问题。不幸的是,很明显 HttpClient 不支持 NTLM(至少,版本 2),这实际上意味着 NTLMv2 代理背后的用户不能使用 Maven 2.2.0。

为了希望一劳永逸地解决这个问题,Maven 2.2.1 将支持在构建过程中指定您希望将哪个 Wagon 提供程序用于给定协议。然后,提供者名称将使用格式附加到协议中,<protocol>-<provider>以形成 Wagon 的组件角色提示。

从 Maven 2.2.1 开始,有两种方法可以指定应该使用哪个 Wagon 提供程序:通过命令行,或<server>settings.xml.

命令行配置

要从命令行指定 Wagon 提供程序,只需使用-Dmaven.wagon.provider.<protocol>=<provider-name>命令行选项,如下所示:

mvn -Dmaven.wagon.provider.http=httpclient clean install

这指示 Maven 使用基于 HttpClient 的 Wagon 实现来连接到 HTTP 存储库。

settings.xml配置

要指定用于特定服务器的 Wagon 提供程序,请修改您的settings.xml文件以将<wagonProvider>配置添加到您的<server>条目中,如下所示:

<settings>
  [...]
  <servers>
    <server>
      <id>central</id>
      <configuration>
        <wagonProvider>httpclient</wagonProvider>
        [...]
      </configuration>
    </server>

可用的货车供应商

Maven 2.2.1 为 HTTP/HTTPS Wagons 提供了两个提供程序:lightweighthttpclient. 如果您通过构建扩展添加新的 HTTP Wagon 实现,则需要确保扩展将其 Wagon 组件绑定到表单<protocol>-<provider>的角色提示,以便允许用户指定您的替代 Wagon 提供程序。例如,HttpClient HTTP Wagon 组件定义如下所示:

<component>
  <role>org.apache.maven.wagon.Wagon</role>
  <role-hint>http-httpclient</role-hint>
  <implementation>org.apache.maven.wagon.providers.http.HttpWagon</implementation>
  <instantiation-strategy>per-lookup</instantiation-strategy>
</component>

注意: HTTP/HTTPS Wagons 的默认提供程序是lightweight.