在单个 pom 中部署多个文件
Deploying multiple files in single pom
我有一个 pom,它获取一些 zip,解压缩并部署里面的 5 个工件(jar + pom)。
它看起来像:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>none</phase>
</execution>
<execution>
<id>deploy-api-jar</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<file>target/xxx.jar</file>
<pomFile>target/xxx/pom.xml</pomFile>
<sources>target/xxx-sources.jar</sources>
<repositoryId>${nexus-repository-id}</repositoryId>
<url>http://${nexus.deploy.server}/${nexus-repository-path}</url>
</configuration>
</execution>
所以我对 5 个不同的工件执行了 5 次执行。
它适用于第一个工件,但随后失败,因为它尝试再次上传:
[INFO] Uploading: http://www.zzz.com:8081/nexus/content/repositories/mobile-r/xxx/server/deployall/8.1.17/deployall-8.1.17-dependencies.dot
它失败并显示 400 BadRequest
,因为 depedencies.dot
8.1.17 已经部署。
为什么它会尝试在每个工件之间上传 depedencies.dot
?我可以禁用它吗?
编辑:回答漏了重点
它失败了,因为 Maven 和你的 nexus 只允许一个工件用于给定的一组坐标。
所以,如果你想把它们都部署到同一个坐标,你需要给它们不同的分类器。
你想要做的是高度不规则地使用构建脚本。 Maven 假定来自单个 POM 的所有工件都具有相同的坐标(但不同的分类器)。如果需要,您可以将工件附加到项目并使用生命周期中的正常 deploy:deploy
任务上传它们。您可以为此使用 build-helper-maven-plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>file1</file>
<type>extension of your file</type>
<classifier>x</classifier>
</artifact>
<artifact>
<file>file2</file>
<type>extension of your file</type>
<classifier>y</classifier>
</artifact>
...
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
但是由于您想上传 5 个分离的工件,POM 不是您想要的,请改用 bash 脚本进行上传(多次调用 mvn deploy:deploy-file
)。
我有一个 pom,它获取一些 zip,解压缩并部署里面的 5 个工件(jar + pom)。
它看起来像:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>none</phase>
</execution>
<execution>
<id>deploy-api-jar</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<file>target/xxx.jar</file>
<pomFile>target/xxx/pom.xml</pomFile>
<sources>target/xxx-sources.jar</sources>
<repositoryId>${nexus-repository-id}</repositoryId>
<url>http://${nexus.deploy.server}/${nexus-repository-path}</url>
</configuration>
</execution>
所以我对 5 个不同的工件执行了 5 次执行。
它适用于第一个工件,但随后失败,因为它尝试再次上传:
[INFO] Uploading: http://www.zzz.com:8081/nexus/content/repositories/mobile-r/xxx/server/deployall/8.1.17/deployall-8.1.17-dependencies.dot
它失败并显示 400 BadRequest
,因为 depedencies.dot
8.1.17 已经部署。
为什么它会尝试在每个工件之间上传 depedencies.dot
?我可以禁用它吗?
编辑:回答漏了重点
它失败了,因为 Maven 和你的 nexus 只允许一个工件用于给定的一组坐标。
所以,如果你想把它们都部署到同一个坐标,你需要给它们不同的分类器。
你想要做的是高度不规则地使用构建脚本。 Maven 假定来自单个 POM 的所有工件都具有相同的坐标(但不同的分类器)。如果需要,您可以将工件附加到项目并使用生命周期中的正常 deploy:deploy
任务上传它们。您可以为此使用 build-helper-maven-plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>file1</file>
<type>extension of your file</type>
<classifier>x</classifier>
</artifact>
<artifact>
<file>file2</file>
<type>extension of your file</type>
<classifier>y</classifier>
</artifact>
...
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
但是由于您想上传 5 个分离的工件,POM 不是您想要的,请改用 bash 脚本进行上传(多次调用 mvn deploy:deploy-file
)。