【发布时间】:2021-05-12 06:12:03
【问题描述】:
我已经为此苦苦挣扎了一段时间。
背景:我们有一些生成 jar 的 Jenkins 作业和其他将 jar 上传到 nexus 的作业。在我们的例子中,我们正在寻找myJar-1.0.jar 和myJar-1.0-myClassifier.jar。显然它们都是使用相同的pom.xml 文件生成的。
我想要实现的是通过 REST API 和 curl 命令使用 pom.xml 将它们上传到 Nexus(我们使用 Nexus2)。
pom.xml 文件如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>myJar</artifactId>
<version>1.0</version>
<name>My Name</name>
<packaging>pom</packaging>
<properties>
<otherJar.version>1.5</otherJar.version>
...
</properties>
<dependencies>
<dependency>
<groupId>x.y</groupId>
<artifactId>art</artifactId>
<version>{$otherJar.version}</version>
</dependency>
...
</dependencies>
</project>
我用来上传的curl命令(没有分类器的jar)是:
curl -v -F r=releases -F hasPom=true -F e=jar -F file=@pom.xml -F file=@myJar-1.0.jar -u user:pass http://link/to/nexus/service/local/artifact/maven/content
这按预期工作。 jar 使用 pom.xml 文件中提到的 groupid、artifactid 和 version 上传到 nexus。
我的问题是 - 在我上传这个 jar 之后,如果我们有相同的 pom.xml,我如何上传带有 classifier 的 jar?
- 我应该更改
pom.xml文件吗?如果有,怎么做? - 我应该修改 curl 命令吗?我尝试添加
-F c=myClassifier,但没有奏效。这导致 Nexus 产生错误:<html><body><error>Repository with ID='releases' does not allow updating artifacts.</error></body></html>(因为已经有一个具有相同 groupid、artifactid 和版本的工件 - 我刚刚上传的那个;似乎忽略了分类器)
【问题讨论】:
-
为什么要在 Jenkins 中构建和部署单独的作业。 Maven 可以毫无问题地进行部署,一切都会正常工作......使用 Curl 等没有麻烦。
-
对这个问题的简短回答是——这很复杂:) 为了提出这个问题,我试图尽可能地简化上下文。很遗憾,我们目前无法更改工作的定义方式。
-
所有工件和 pom 应一次性上传。由于这是 NXRM 2,您可以使用 UI 进行测试,同时观察 HTTP 流量以确定正确的参数:blog.sonatype.com/…