nexus-staging-maven-plugin在没有信息的情况下返回401

时间:2018-05-12 21:31:44

标签: maven sonatype

我正在努力将Anonimatron作为中心Maven资源库中的库提供。为此,我按照the sonatype documentation中的文档进行操作。运行mvn deploy时,nexus staging插件会出现401错误,但我无法弄清楚原因,因为它没有告诉我发生了什么。

我在oss.sonatype.org有一个工作帐户,我在那里创建了一个用户访问令牌。访问令牌存储在我的maven ~/.m2/settings.xml的服务器部分中,如此(出于原因删除了令牌):

<servers>
    <server>
        <id>ossrh</id>
        <username>USER_TOKEN</username>
        <password>USER_PASSPHRASE</password>
    </server>
</servers>

然后,在我的maven https://github.com/realrolfje/anonimatron/blob/feature/anonimatron-as-library/pom.xml文件中,我添加了nexus staging插件:

<distributionManagement>
    <snapshotRepository>
        <id>sonatype-snapshots</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
        <id>sonatype-release</id>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
    </repository>
</distributionManagement>
[...]
<plugin>
    <groupId>org.sonatype.plugins</groupId>
    <artifactId>nexus-staging-maven-plugin</artifactId>
    <version>1.6.7</version>
    <extensions>true</extensions>
    <configuration>
        <serverId>ossrh</serverId>
        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
    </configuration>
</plugin>

当我运行mvn deploy时,我收到错误:

  

[错误]无法执行目标org.sonatype.plugins:nexus-staging-maven-plugin:1.6.7:在项目anonimatron上部署(inject-nexus-deploy):无法部署工件:无法传输工件com .rolfje.anonimatron:anonimatron:jar:javadoc:1.9.3-20180512.204932-1 from / to sonatype-snapshots(https://oss.sonatype.org/content/repositories/snapshots):无法传输文件:https://oss.sonatype.org/content/repositories/snapshots/com/rolfje/anonimatron/anonimatron/1.9.3-SNAPSHOT/anonimatron-1.9.3-20180512.204932-1-javadoc.jar。返回码为:401,ReasonPhrase:未经授权。 - &GT; [帮助1]

为了检查我的令牌确实有效,我尝试使用curl上传:

curl -u USER_TOKEN:USER_PASSPHRASE \
https://oss.sonatype.org/content/repositories/snapshots/com/rolfje/anonimatron/anonimatron/1.9.3-SNAPSHOT/anonimatron-1.9.3-20180512.093802-1-javadoc.jar \
--request PUT --data target/anonimatron-1.9.3-SNAPSHOT.jar

这成功了,我可以看到上传的jar出现在Nexus Repository Manager中。

我执行了与this question相同的步骤,但由于我还没有上传任何内容,版本号不会发生冲突,尽管我最后做了手动javadoc上传。由于这是一个快照,并且它有效,我认为我的问题在于nexus-staging-maven-plugin。

我正在寻找的是一种调试nexus-staging-maven-plugin的方法,以便我知道它失败的原因。它没有告诉我它正在使用哪些凭据,它是从settings.xml文件中加载的凭据,以及它采取的确切步骤,即使我使用-e和-X标志运行mvn。

2 个答案:

答案 0 :(得分:0)

正如@khmarbaise所提到的,使用标准maven-deploy插件执行部署似乎确实有效。作为问题的一部分,我将这个问题报告给sonatype OSSRH-39766OSSRH-39777

Joel重新获得了我的权限,现在nexus发布插件似乎正在运行。请注意,这也可能是由maven-deploy引起的,这可能会“引发”某些内容。

总而言之,nexus发布插件可以对日志记录进行一些改进,特别是:

  1. 使用什么配置文件执行步骤
  2. 正在执行的步骤(确切地说)
  3. 如果有401,请告诉使用哪个用户标识执行该步骤以及从哪个环境获取(命令行,settings.xml等)。
  4. 我看到有些人正在努力使用nexus插件,而插件实际上应该让生活更轻松。

    感谢SonaType提供快速有效的回复!

答案 1 :(得分:0)

在〜/ .m2 / settings.xml文件中添加以下内容:

<servers>
    <server>
        <id>ossrh</id>
        <username>{YOUR_JIRA_USERNAME}</username>
        <password>{YOUR_JIRA_PASSWORD}</password>
    </server>
</servers>

此外,更新您的pom.xml:

<distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
</distributionManagement>
  1. 确保存储库ID和服务器ID匹配。 在此示例中,id为“ ossrh”。

  2. 此外,请注意,用户名和密码应与您的jira登录名相同。就是这样mvn clean deploy现在将您的jar上载到声呐重复版。部署愉快!