maven发布 - > peer未经过身份验证

时间:2013-03-28 20:56:21

标签: java maven svn https release

我正在尝试释放我的软件(之前我从未这样做过),到目前为止我已经能够执行mvn release:prepare。当我正在执行release:执行时出现以下错误:

[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plug
in:2.7:deploy (default-deploy) on project img2stl: Failed to deploy artifacts: C
ould not transfer artifact nl.byterendition:img2stl:jar:0.9 from/to byterenditio
n-releases (https://localhost:443/svn/repo/releases): peer not authenticated ->
[Help 1]

我在localhost:443设置了一个受本地密码保护的svn存储库,所以我将以下内容添加到我的.m2文件夹中的settings.xml

编辑包括Edwin Buck的回答:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <servers>
        <server>
            <id>byterendition-releases</id>
            <username>username</username>
            <password>password</password>
        </server>
        <server>
            <id>byterendition-snapshots</id>
            <username>username</username>
            <password>password</password>
        </server>
    </servers>
</settings>

这是我的pom的有用部分:

<distributionManagement>
    <repository>
        <id>byterendition-releases</id>
        <url>https://localhost:443/svn/repo/releases</url>
    </repository>
    <snapshotRepository>
        <id>byterendition-snapshots</id>
        <url>https://localhost:443/svn/repo/snapshots</url>
    </snapshotRepository>
</distributionManagement>

如何让maven访问svn存储库?

好吧,正如Edwin Buck建议我不应该使用localhost,但由于我无法让它工作,否则我想我会尝试使用我用于工作的远程SVN服务器。现在我得到了一个不同的错误:

[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plug
in:2.7:deploy (default-deploy) on project img2stl: Failed to deploy artifacts: C
ould not transfer artifact nl.byterendition:img2stl:jar:0.9.5 from/to byterendit
ion-releases (https://svn.science.ru.nl/repos/estens/releases/): Failed to trans
fer file: https://svn.science.ru.nl/repos/estens/releases/nl/byterendition/img2s
tl/0.9.5/img2stl-0.9.5.jar. Return code is: 409, ReasonPhrase: Conflict. -> [Hel
p 1]

我再次可以从Eclipse访问此repo。有谁知道我做错了什么?

9 个答案:

答案 0 :(得分:62)

从3.0.5版开始,Maven会检查https连接上的SSL证书。您可以通过添加命令行参数

临时修复此问题
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

将SSL证书安装到JRE中应永久解决问题。

官方文件:http://maven.apache.org/wagon/wagon-providers/wagon-http/

答案 1 :(得分:12)

第1步。将DER格式* .cer(/X.509 .cert)文件中的证书下载到您当地的目录

(您可以在浏览器中执行此操作;对于Chrome,请点击锁定符号,显示Ceritficate - &gt;复制到文件)

第2步。将其导入Java信任库

\ Program_Files \ Java \ jdk1.6.0_45 \ jre \ lib \ security&gt;%JAVA_HOME%\ jre \ bin \ keytool -v -alias mavensrv -import -file d:\ temp \ apacher.cer -keystore trust.jks

第3步。将maven的路径作为环境变量

设置MAVEN_OPTS = -Xmx512m -Djavax.net.ssl.trustStore =%JAVA_HOME%/ jre / lib / security / trust.jks -Djavax.net.ssl.trustStorePassword = changeit -Djavax.net.ssl.keyStore =% JAVA_HOME%/ jre / lib / security / trust.jks -Djavax.net.ssl.keyStoreType = jks -Djavax.net.ssl.keyStorePassword = changeit

答案 2 :(得分:3)

https://github.com/escline/InstallCert提供必要的工具,并提供有关如何将远程证书导入系统范围的证书库的分步说明。

答案 3 :(得分:2)

您在settings.xml中的条目是服务器ID为localhost,但您正在访问ID为byterendition-releasesbyterendition-snapshots的存储库。

这意味着maven不会将凭据与这两个服务器进行重新认证和关联,因为它们具有不同的“身份”。您将需要byterendition-releasesbyterendition-snapshots的settings.xml条目。

现在,如果你添加了一个像

这样的条目
    <server>
        <id>byterendition-releases</id>
        <username>user</username>
        <password>password</password>
    </server>

然后,maven会遇到byterendition-releases的https身份验证质询,用户名为user,密码为password,因为它有byterendition-releases的服务器凭据条目。

您还必须为byterendition-snapshots添加其他条目,或将其设置为与byterendition-releases具有相同的服务器ID。

---编辑以跟上更新后的问题---

您正使用localhost网址访问您的存储库。虽然如果您的存储库实际上位于同一台主机上,这可能会有效,但有很多原因可能导致它无效。

  1. SVN存储库位于远程SVN服务器上,因此在远程服务器以外的地方进行开发时会失败。
  2. HTTP服务器未配置为解析localhost的方式与解析外部请求的方式完全相同。
  3. 无论哪种方式,沟渠localhost。如果您无法获得机器的稳定DNS名称,即使放入IP地址也是更好的选择。如果您的SVN服务器使用DHCP,那么请花时间让DynamicDNS正常工作(但实际上,如果可以,您应该为服务器获取静态IP)。

答案 4 :(得分:2)

我发现Java版本可以在这里发挥作用。

使用Maven 3.0.5我在Java 6中遇到此错误,但切换到Java 7(或更新版本)为我解决了这个问题。

答案 5 :(得分:0)

连接到服务器时看起来像SSL问题。也许在用户名和密码检查之前。

您是否使用SSL客户端身份验证配置svn服务器?这意味着您需要将客户端证书发送到服务器。

答案 6 :(得分:0)

升级到OSX Mavericks后我遇到了很多安全问题

  • Amazon AWS的SSL问题
  • peer未通过Maven和Eclipse验证
  • trustAnchors参数必须为非空

我应用了这个JAVA更新并修复了我的所有问题: http://support.apple.com/kb/DL1572?viewlocale=en_US

答案 7 :(得分:0)

我正在使用maven 3.5.3,我选择通过根据上述答案添加命令行参数来临时修复此SSL问题。但参数的格式似乎有所改变。

-D maven.wagon.http.ssl.insecure=true -D maven.wagon.http.ssl.allowall=true

很抱歉,我无法评论@Alex Punnen的答案,所以我必须写一个新答案。

答案 8 :(得分:0)

使用maven 3.6.0时出现相同的问题。所有建议的解决方案(使用-Dmaven.wagon.http.ssl.insecure = true,-Dmaven.wagon.http.ssl.allowall = true,更新CA存储)均不适用于我。实际上,部署不是在第一个模块上失败,而是在大约25欧元左右,并且对于之前的所有模块都是成功的。因此,我认为通常SSL处理是可以的,并且本地<>服务器连接或证书中存在一般问题。

让我有些困惑的是,今天我偶然发现了this jacoco issue,他们提到了the parameter。作为部署插件配置的一部分,将此参数添加到我的pom.xml中为我解决了这个问题。

但是,我还不清楚为什么在以后的某个模块上部署失败,而不是在第一个模块上失败。