【问题标题】:working around maven error: Project 'XYZ' is duplicated in the reactor解决Maven错误:项目'XYZ'在反应堆中重复
【发布时间】:2010-10-09 23:03:16
【问题描述】:

我正在创建一个构建许多其他相关项目的多模块项目。其中一些项目也是多模块项目,在某些情况下它们构建相同的子项目。 Maven 对我大喊大叫,但这是故意的,无论如何我都希望构建它。

有人解决过这个问题吗? 谢谢。

【问题讨论】:

  • 发生错误的项目必须在单个层次结构中。对我来说,它是从多个模块中引用的。

标签: maven-2


【解决方案1】:

当你有这样的结构时会发生这种情况:

+-- root-project-A
    `-- pom.xml
    +-- module-A
    |   `-- pom.xml
    +-- module-B
    |   `-- pom.xml
    +-- root-project-B
        `-- pom.xml
        +-- module-C
            `-- pom.xml

然后像这样配置你的模块:

|-- root-project-A
    `-- pom.xml
        <modules>
         <module>module-A</module>
         <module>module-B</module>
         <module>root-project-B</module> <!-- Error: project A reference project B -->
         <module>root-project-B/module-C</module> <!-- Error: project A reference project B -->
        </modules>

|-- root-project-B
    `-- pom.xml
        <modules>
         <module>module-C</module>
        </modules>

项目 A 无法引用项目 B,因为 B 没有将 A 引用为父项。包必须是独立的

【讨论】:

    【解决方案2】:

    我认为你不应该这样做。 (您可以尝试定义一个配置文件 - 比如说一个完整构建配置文件,您可以在其中确保每个模块只编译一次,另一个配置文件会在您进行子构建时添加其他模块。)

    但您最好采用 maven 方式 - 每个项目都应仅包含来自其自己目录的目录作为模块,例如只有直系子女。

    Maven 有一些非书面的隐含假设,例如 - 总是从父目录中的 pom 继承子模块,例如继承树必须与您的目录树匹配,否则某些插件将无法工作,例如发布插件,或者一些报告插件。

    简短的回答是 - 在 maven 中,您的项目层次结构/树中不能有两次模块。

    在 maven 中有很多错误的方法,因此必须坚持一些已知有效的方法——比如 pom 层次结构 == 目录结构。

    【讨论】:

    • in maven you cannot have a module twice in your project hierarchy/tree 是我一直在寻找的。我认为 Maven 不允许这样做并能够解决它是愚蠢的。
    【解决方案3】:

    对我来说,&lt;artifactId&gt; 在他们的 pom 中的 2 个不同模块是相同的,这导致了这个错误。
    更改后,效果很好。

    【讨论】:

    • 这对我有帮助。谢谢!
    • 也为我工作。这是一个不明显的错误,但它就在那里。谢谢!
    【解决方案4】:

    听起来您可能从多个项目构建的“相同子项目”是所有这些项目的依赖项。在你的目录树中将它移到一个很好的高层,并在所有需要它的项目 pom 中将它声明为依赖项。它将由您构建的第一个需要它的项目构建,其余的将看到您“去过那里,做过那个”并跳过它。

    【讨论】:

      【解决方案5】:

      在我的例子中,IntelliJ 将 &lt;module&gt;parentModule/XYZ&lt;/module&gt; 放在父父模块 pom.xml 中

      所以用 Find All (CTRL+SHIFT+F) 'XYZ' 检查最终的错误

      【讨论】:

        【解决方案6】:

        您是否尝试过这些命令行选项之一?

        -fae,--fail-at-end            Only fail the build afterwards; allow all
                                      non-impacted builds to continue
        -fn,--fail-never              NEVER fail the build, regardless of project
                                      result
        

        【讨论】:

        • 不,这很糟糕。老实说,我什至不知道当 pom 出现设置问题时它是否仍然允许构建工作,但即使它确实没关系。即使它确实使构建成功,现在您正在查看在编译失败时构建“成功”,例如,在这将隐藏的许多其他问题中。
        猜你喜欢
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-07-06
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        相关资源
        最近更新 更多