【发布时间】:2023-03-14 14:35:01
【问题描述】:
每当我尝试使用 nexus-staging-maven-plugin 从 maven 3.05 将工件部署到我的 Nexus OSS 2.12 服务器时,我都会收到一条错误消息:
[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.7:deploy (default-deploy) on project myproject
Failed to deploy artifacts: Could not transfer artifact com myproject:myproject:jar:0.0.1-20160325.164052-1 from/to snapshots (http://nexus.myproject.com/content/repositories/snapshots)
Failed to transfer file: http://nexus.myproject.com/content repositories/snapshots/com/myproject/myproject/0.0.1-SNAPSHOT/myproject-0.0.1-20160325.164052-1.jar.
Return code is: 401, ReasonPhrase: Unauthorized.
现在奇怪的是,我可以使用 cURL 和手动指定的凭据来部署 pom:
curl -u deployment:deployment123 http://nexus.myproject.com/content/repositories/snapshots/com/myproject/myproject/0.0.1-SNAPSHOT/myproject-0.0.1.pom --request PUT --data @pom.xml
我知道我的~/.m2/settings.xml 文件中配置了服务器凭据。这是我的:
<?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>nexus</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>central</id>
<url>http://nexus.myproject.com/content/repositories/central/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
请注意,该文件中的 mirrors 部分运行良好 - 当我构建时,maven 使用匿名用户从 nexus 服务器获取我的依赖项。
我在~/.m2/settings.xml 文件中配置的凭据与ID 为nexus 的服务器相关联。这是我在 pom.xml 文件的 plugins 部分中引用的同一台服务器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus</serverId>
<nexusUrl>http://nexus.myproject.com/</nexusUrl>
</configuration>
</plugin>
要上传到的存储库在我的 pom 文件的 repositories 部分中配置:
<repositories>
<repository>
<id>snapshots</id>
<url>http://nexus.myproject.com/content/repositories/snapshots</url>
</repository>
<repository>
<id>releases</id>
<url>http://nexus.myproject.com/content/repositories/releases</url>
</repository>
</repositories>
最后,通过运行mvn help:effective-settings,我可以确定~/.m2/settings.xml 文件正在被读取。
当我尝试从命令行运行部署时,我使用命令mvn clean deploy -DskipTests=true。
回顾一下,我有一个启用了库存部署帐户的 Nexus 服务器。我可以使用该帐户将工件从 cURL 部署到存储库,但是当我尝试使用相同的凭据从 Maven 进行部署时,我得到了 HTTP 401。
有人知道为什么这里可能存在差异吗?
【问题讨论】:
-
如何调用 Maven 将 atifacts 部署到 Nexus?
-
你的 pom 中有
<repositories>部分吗?那看起来像什么? nexus-staging-maven-plugin 有什么用?我以前从来不需要它来使用 Maven 部署到 nexus。 -
@khmarbaise:我运行 mvn clean deploy。对不起,应该把它放在问题中
-
@jpennell 将
<repositories>部分添加到问题中。我使用了nexus-staging-maven-plugin,因为我在关注 Nexus 网站上的一些文档。那是他们的插件。您是否建议使用标准的maven-deploy-plugin来代替? -
您是否正确配置了暂存存储库在 Nexus 中,如果我正确地看到您没有...