我设置了一个简单的 Maven 项目,可以部署到本地 Nexus 服务器。所有相关的配置元素都已就位(带有 URL 的 <distributionManagement>
部分,带有用户名和密码的 settings.xml 文件中的 <server>
元素等)。我知道设置是正确的,因为在 Maven 3.0 上,我可以部署。在 Maven 3.0.4 上,我有两个问题。
如果我尝试使用开箱即用的 3.0.4 进行部署,我会得到 handshake_failure
。据我所知,这是因为 3.0.4 switched backing HTTP clients 。我已将服务器 CA 的证书包含在 javax.net.ssl.trustStore
指向的信任库中在我的MAVEN_OPTS
环境变量,以及由 javax.net.ssl.keyStore
指定的 keystore 中的客户端证书, as instructed 。同样,这适用于 3.0。由于某种原因,新的 HTTP 客户端没有接收到它。
所以,我尝试删除 wagon-http-lightweight
JAR放入lib/ext/
3.0.4 的目录,这给我带来了第二个问题:一旦我强制使用 lightweight
客户,我不再收到 handshake_failure
并开始收到 HTTP 401。同样,用户名和密码在 Maven 3.0 下工作。它显然正在获取用户名,因为使用 -X
运行包括行“
我已经为此苦苦挣扎了几个小时,但我已经走进了死胡同。我欢迎解决方案,但我也欢迎对我的下一步行动提出任何建议。
最佳答案
我推荐:
升级到 3.0.5,该版本现已发布,并修复了许多与 SSL 相关的问题,并升级了故障货车。
阅读:
Maven 3.0.4 Release Notes 。 3.0.4 描述了有关 httpclient 的更改。
Maven 3.0.5 Release Notes 。这有一个模糊的解释,但是如果你仔细观察,你会发现:
- MNG-5430升级Wagon的版本。就术语而言,这意味着 SSL support which is broken in 3.0.4已修复。
The Maven Guide to HTTP Settings 。这些反射(reflect)了上述更改,我相信会解决您的问题。
关于Maven 3.0.4 部署失败,但 Maven 3.0.0 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15247106/