选择替代货车供应商的指南
默认情况下,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 提供了两个提供程序:lightweight
和httpclient
. 如果您通过构建扩展添加新的 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
.