【问题标题】:Deployment deploys twice or not at all部署部署两次或根本不部署
【发布时间】: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


【解决方案1】:

that question 的启发,我尝试禁用发布配置文件,现在它以某种方式工作。我无法为这种行为想出任何解释。

用于删除发布配置文件的代码段:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <configuration>
                <useReleaseProfile>false</useReleaseProfile>
            </configuration>
        </plugin>

【讨论】: