【发布时间】:2026-01-24 14:50:02
【问题描述】:
我设法构建了一个 Maven 项目,使发布部署工件加倍或根本不加倍。
由于该项目使用了我们公司的抽象父pom,所以贴出相关代码有点困难,但我会尝试。
首先要做的事情。父pom有如下定义:
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<deployAtEnd>true</deployAtEnd>
</configuration>
</plugin>
在实际项目中没有定义任何内容,在这些行之后发布将失败:
[INFO] [INFO] Uploaded to our_repo: http://acme.org/nexus/content/repositories/org.acme.project/1.0.0/org.acme.project-1.0.0-sources.jar (14 kB at 3.8 kB/s)
[INFO] [INFO] Uploading to our_repo: http://acme.org/nexus/content/repositories/org.acme.project/1.0.0/org.acme.project-1.0.0-sources.jar
我们的 repo 不喜欢有两个版本相同的 JAR,所以一切都失败了。这里奇怪的部分是部署不是在最后。事实上,项目构建中途失败了。
但是,如果我在项目中复制上述插件,则构建将在同一位置打印Deploying repo:org.acme.repo:1.0.0 at end,然后最后不会部署任何内容。
但我什至不确定这是问题的一部分。我仍然认为无论插件定义在哪里,两个构建都应该完全相同。
我找到了this question,这让我检查了有效pom中的maven-source-plugin。但是那里没有重复:
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
<configuration>...</configuration>
</execution>
</executions>
</plugin>
maven-assembly-plugin 中也没有定义任何内容,因此没有为部署添加 JAR(建议在 this question 中)。
这可能与我们使用 Java 10 或 Maven 3.5.2 有关,但老实说,我不知道要测试什么以及要在哪里进行。
我该如何解决这个烂摊子? (如果您想了解有关构建的更多信息,请询问。pom.xml 非常适合在此处分享它们。)
【问题讨论】:
-
一个插件的重复定义,如 maven-source-plugin 等。顺便说一句:如何调用 maven 来完成发布?
-
这是一个多模块构建吗?如果不是,那么
deployAtEnd的行为可能会很奇怪,尤其是因为它也被记录为“实验性” -
@khmarbaise 该版本是通过
release:prepare release:perform -P document,parallel执行的(我认为至少最后一个配置文件是我们为并行执行测试所做的)。 -
@SteveC 是的,它是多模块的。否则
deployAtEnd无论如何都不会那么有用。 -
@SteveC
deployAtEnd总是有用的,因为它可以防止在测试/构建失败的情况下将失败上传到存储库......最后只会上传完整的成功构建......唯一的问题是,如果你有一个非 java/javaee 构建的东西,比如 tycho 构建,或者这可能意味着你不能使用deployAtEnd/installAtEnd的东西......
标签: maven