我有一个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”
这真是令人沮丧 - 为什么不告诉我反应堆中的项目所有是什么?无论如何,我做错了什么?
答案 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>
相应的父多模块项目的个部分。
例如下面的项目结构:
假设您正在尝试构建proj1A。尝试
mvn package -pl A/proj1/proj1A
在主计算机的pom目录中,如果您没有以下内容,您仍然会遇到相同的反应堆错误:
答案 2 :(得分:1)
您使用的命令:
mvn clean install --projects 'submodule1','submodule2`
适用于您执行此命令的模块的submodule1
中指定的子模块submodule2
和pom.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>
。