【问题标题】:maven release -> peer not authenticatedMaven 发布-> 对等体未通过身份验证
【发布时间】:2013-03-19 11:45:31
【问题描述】:

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

[信息] [错误] 无法执行目标 org.apache.maven.plugins:maven-deploy-plug in:2.7:deploy (default-deploy) on project img2stl: 未能部署工件:C 不能将工件 nl.byterendition:img2stl:jar:0.9 从/到 byterenditio 传输 n-releases (https://localhost:443/svn/repo/releases): 对等体未通过身份验证-> [帮助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 服务器来尝试这个。现在我得到一个不同的错误:

[信息] [错误] 无法执行目标 org.apache.maven.plugins:maven-deploy-plug in:2.7:deploy (default-deploy) on project img2stl: 未能部署工件:C 不能将工件 nl.byterendition:img2stl:jar:0.9.5 从 / 转移到 byterendit ion-releases (https://svn.science.ru.nl/repos/estens/releases/):传输失败 fer 文件:https://svn.science.ru.nl/repos/estens/releases/nl/byterendition/img2s tl/0.9.5/img2stl-0.9.5.jar。返回码为:409,ReasonPhrase:冲突。 -> [赫尔 1]

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

【问题讨论】:

  • 像你一样改变你原来的问题是个坏主意,现在这个帖子没有多大意义了。

标签: java maven svn https release


【解决方案1】:

从 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/

【讨论】:

  • 在 MacOSX 上更新到 Mavericks 后,这开始发生在我身上,结果证明这是解决方案:stackoverflow.com/questions/4428901/…
  • Maven 发布插件不会将系统属性传播到 Maven 发布版本。因此需要将&lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt; &lt;configuration&gt; &lt;arguments&gt;-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true&lt;/arguments&gt; &lt;/configuration&gt; &lt;/plugin&gt; 添加到settings.xml see notatube.blogspot.nl
  • 当Gradle无法访问maven repo时,它也解决了我的问题。
  • 我将 ..... 添加到 pom.xml 而不是 settings.xml。添加到 settings.xml 对我不起作用。
  • 我们应该如何安装 SSL 证书?
【解决方案2】:

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

(您可以从浏览器执行此操作;对于 Chrome,请单击锁定符号,显示证书 --> 复制到文件)

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

\Program_Files\Java\jdk1.6.0_45\jre\lib\security>%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

【讨论】:

  • 在得到红色这个答案之前我已经完成了步骤 1 和 2,它解决了一些 ReasonPhrase:Forbiddenpeer not authenticated 问题。接下来peer not authenticated 再次发生,添加-Djavax.net.ssl.trustStore=%JRE_HOME%\lib\security\cacerts -Djavax.net.ssl.trustStorePassword=changeit 并没有解决它。感谢您的第 3 步,我添加了 -Djavax.net.ssl.keyStore=%JRE_HOME%\lib\security\cacerts -Djavax.net.ssl.keyStorePassword=changeit 也解决了我的问题。 (其中JAVA_HOME=C:\Programmi\java\jdk1.7.0_25JRE_HOME=%JAVA_HOME%\jre
  • 这对我有用。可以在此处找到更多说明:maven.apache.org/guides/mini/guide-repository-ssl.html 另外,如果您公司的证书未签名(不安全),则无论如何都需要添加以下选项-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
【解决方案3】:

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

这意味着 maven 不会识别凭据并将其与这两个服务器相关联,因为它们具有不同的“身份”。您将需要 byterendition-releasesbyterendition-snapshots 的 settings.xml 条目。

现在,如果您添加了类似

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

然后 maven 将使用用户名 user 和密码 password 来满足对 byterendition-releases 的 https 身份验证挑战,因为它具有 byterendition-releases 的服务器凭据条目。

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

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

您正在使用localhost URL 访问您的存储库。如果您的存储库确实在同一台主机上,这可能会起作用,但它可能不起作用的原因有很多。

  1. SVN 存储库位于远程 SVN 服务器上,因此在远程服务器以外的其他地方开发时会失败。
  2. HTTP 服务器未配置为解析 localhost 的方式与解析外部请求的方式完全相同。

无论哪种方式,放弃本地主机。如果您无法获得机器的稳定 DNS 名称,即使输入 IP 地址也是更好的选择。如果您的 SVN 服务器在 DHCP 上,请花时间让 DynamicDNS 正常工作(但实际上,如果可以的话,您应该为服务器获取静态 IP)。

【讨论】:

  • 谢谢,我这样做了,但没有帮助,我仍然得到完全相同的错误。我编辑了帖子以反映更新的 settings.xml。如何检查 maven 是否真的使用了 settings.xml 文件来查看是否是问题所在?
  • 尝试使用 -X 选项运行 maven 会输出大量数据,这些数据可用于确定您是否连接到正确的服务器,无论是否使用凭据。最后,如果您可以访问服务器,请检查您是否在后端验证失败,因为这里可能存在其他网络问题。
  • 嗯,看来 maven 正在使用正确的文件:[DEBUG] Reading user settings from C:\Users\username\.m2\settings.xml
  • 我在 Eclipse 中添加了 repo 位置,在那里我可以使用我放入 settings.xml 文件中的相同凭据访问它
  • 很可能 SSL 证书是个问题。也许这与尝试以localhost 联系您的机器有很大关系。奇怪的是您的证书是为您机器的主机名签名的,这可能不是 localhost。如果在 Linux 系统上查看 /var/log/secure 是否有故障,它们通常“足够描述”以找到解决方案的下一部分。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我发现 Java 版本可以在这里有所作为。

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

    【讨论】:

    • 我在 Java 7 和 maven 3.3 上,我仍然有同样的问题
    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

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

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

      我应用了这个 JAVA 更新,它解决了我的所有问题: http://support.apple.com/kb/DL1572?viewlocale=en_US

      【讨论】:

        【解决方案8】:

        我使用的是 maven 3.5.3,我选择通过根据上述答案添加命令行参数来临时修复此 SSL 问题。但是参数的格式似乎发生了一些变化。

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

        对不起,我无法评论@Alex Punnen 的答案,所以我必须写一个新的答案。

        【讨论】:

          【解决方案9】:

          我在使用 maven 3.6.0 时遇到了同样的问题。所有建议的解决方案(使用-Dmaven.wagon.http.ssl.insecure=true-Dmaven.wagon.http.ssl.allowall=true、更新 CA 商店)都对我不起作用。实际上,部署失败不是在第一个模块上而是在 ~25ish 左右,并且对于所有以前的模块都是成功的。因此,我假设一般情况下 SSL 处理没问题,并且本地 服务器连接或证书存在一般问题。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多