【问题标题】:Performing maven release in multimodule project failing在多模块项目中执行 Maven 发布失败
【发布时间】:2017-07-26 12:41:09
【问题描述】:

我有一个 multimodule(module1,module2,module3) 项目,它有一个聚合器 pom 来构建所有模块。

现在反应堆的建造顺序是

                     module1
                     module2
                     module3

另外,module2 依赖于 module1,module3 依赖于 module2,现在考虑到依赖关系,我使用 ${project.version} 在 module2 pom 中指定 module1 的版本,同样我使用的是 ${project.version}在模块 3 pom 中引用模块 2。现在快照作业已成功执行,但是当我尝试使用聚合器 pom(这是所有模块的父 pom)释放所有模块时,构建失败,说它无法发布项目由于到未发布的依赖项。有没有办法解决这个问题?

我正在为该项目使用 Maven 3.0.4 maven-release-plugin:2.0-beta-8。 此外,module2 必须使用最新版本的 module1,这对于 module3 和 module2 也是如此。并且有必要将它们一起发布,因为我希望只有在所有模块都成功构建后才能发布它们。

parent pom

    <project>
    <groupid>com.mycompany</groupid>
    <artifactid>parent</artifactid>
    <version>1.0.0</version>
    <modules>
            <module>module1</module>
            <module>module2</module>
            <module>module3</module>
        </modules>






    ..


    </project>


    module1 pom

    <project>
    <parent>
    <groupid>com.mycompany</groupid>
    <artifactid>parent</artifactid>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath>
    </parent>

    <groupid>com.mycompany</groupid>
    <artifactid>module2</artifactid>




    <dependencies>
        ..
        ..

    </dependencies>


    module2 pom


    <project>
    <parent>
    <groupid>com.mycompany</groupid>
    <artifactid>parent</artifactid>
    <version>1.0.0</version>
    <relativePath>../pom.xml</relativePath>
    </parent>

    <groupid>com.mycompany</groupid>
    <artifactid>module2</artifactid>




    <dependencies>
        <dependency>
        <groupid>com.mycompany</groupid>
        <artifactid>module1</artifactid>
        <version>${project.version}</version>
        </dependency>
         ..
         ..
         ..
    </dependencies>

    ..


    </project>

【问题讨论】:

  • 您正在使用 Maven 和发布插件的古老版本。如果可能的话,我会在您进一步排除故障之前进行更新。

标签: maven maven-3 maven-release-plugin


【解决方案1】:

检查事项

1) 确保使用 ${project.version} 指定同一父级下的所有依赖项

2) 确保每个模块没有显式声明它自己的版本,而只指定一个父级,而父级又会设置版本。

3) 确保每个项目没有明确声明 groupId,它应该来自父级。

4) 确保没有 SNAPSHOT 依赖项。 SNAPSHOT 应该出现在所有模块中的唯一位置是在父 pom 中。

5) 确保所有 pom 都声明了包装,父级应该是 pom。

【讨论】:

  • 嗨@Essex Boy,我已确保上述所有内容都已到位。在检查错误时,它专门指的是 module2 的 pom,我用 ${project.version} 指的是 module1
  • @Optimus 你会分享你的 poms 的相关部分吗?
猜你喜欢
  • 2013-03-11
  • 2011-01-20
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2011-05-01
  • 2011-10-07
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多