Maven说它在“反应堆”

时间:2017-09-16 11:21:06

标签: maven

我有一个maven项目,我正在使用项目根目录中的--projects命令运行多个pom文件

mvn clean install --projects proj1,then-proj2

“proj1”和“then proj2”是我想要运行的项目的 artifact ids 。也就是说,我转到每个项目的pom.xml并在那里使用“artifact id”。

proj1& then-proj2是主要pom文件中项目的主要子模块。

假设proj1在A中,然后-proj2在B中,并且A& B在主pom文件中。

当我运行时,maven告诉我:“在反应堆中找不到所选项目:proj1”

这真是令人沮丧 - 为什么不告诉我反应堆中的项目所有是什么?无论如何,我做错了什么?

5 个答案:

答案 0 :(得分:6)

如果您只使用给定项目的artifactId,则必须在命令行上正确定义:

帮助输出Maven(item-right

  

以逗号分隔的指定反应堆项目列表,以构建所有   项目。项目可以由[groupId]:artifactId或其指定   相对路径

这意味着您需要定义:

mvn --help

答案 1 :(得分:2)

尝试一下:

mvn clean install -pl A/proj1, B/then-proj2

检查以下内容:https://stackoverflow.com/a/23076358/1680793

另一件事是确保您已在

中列出了子项目。
<modules>
  <module> 
相应的父多模块项目的

个部分。

例如下面的项目结构:

  • 主要
    • A
      • proj1
        • proj1A
    • B
      • then-proj2

假设您正在尝试构建proj1A。尝试

mvn package -pl A/proj1/proj1A

在主计算机的pom目录中,如果您没有以下内容,您仍然会遇到相同的反应堆错误:

  • “ A”作为“ main”中的模块,或
  • “ proj1”作为“ A”中的模块,或
  • “ proj1A”作为“ proj1”中的模块

答案 2 :(得分:1)

您使用的命令:

mvn clean install --projects 'submodule1','submodule2`

适用于您执行此命令的模块的submodule1中指定的子模块submodule2pom.xml

Working with Multiple modules指南将帮助您了解反应堆及其排序顺序。这种用例的模块的一般结构如下所示:

<groupId>stackoverflow</groupId>
<artifactId>mainmodule</artifactId>
<packaging>pom</packaging>
<version>1.2.3</version>

<modules>
    <module>submodule1</module>
    <module>submodule2</module>
    ... others
</modules>
... other tags

答案 3 :(得分:1)

一种适用于我的解决方案,请从根目录运行以下命令。

mvn clean install --projects :projA, :projB -am

假设 projB 依赖于 projA

  

-am

     

如果指定了项目列表,也           建立所需的项目           列表

答案 4 :(得分:1)

如果您的模块是根据配置文件进行区分的,请确保也考虑配置文件。例如:

NlogN

对于这种设置,pom为:

mvn -P profile1 -pl relative/path/to/project1 clean install

不提及个人资料也会给<profiles> <profile> <id>profile1</id> <modules> <module>project1</module> </modules> </profile> <profile> <id>profile2</id> <modules> <module>project2</module> </modules> </profile> </profiles>