3

我有一个有 5 个孩子的 Maven 项目,但是当我运行它时,我希望最后一个不被执行。我可以很容易地从 pom 文件中推荐它,但是我想知道,是否有一个命令行选项可以排除子模块的执行?

4

4 回答 4

10

我正在处理的当前项目中有此配置以排除某些模块。

在您声明模块的 pom 中,只需输入您每次要运行的模块列表:

<modules>
    <module>this-is</module>
    <module>always-needed</module>
</modules>

然后,在同一个 pom 中添加一个配置文件部分并移动您不想每次运行的模块:

<profiles>
    <profile>
        <id>do-additional-module</id>
        <modules>
            <module>this-is-rarely-needed</module>
        </modules>
    </profile>
</profiles>

现在,当您运行时mvn package,仅执行模块this-is和。always-needed当您指定配置文件时mvn -P do-additional-module package,反应器将运行以前的模块和this-is-rarely-needed

M。

于 2012-07-19T16:32:04.870 回答
1

您可以使用配置文件来实现这一点。 父 pom.xml 中的 maven 配置文件可以包含其他子模块。

这是一个例子。激活后,此“包含”配置文件将包含第二个子模块。

<modules>
    <module>child-module-one</module>
</modules>
<profiles>
    <profile>
        <id>include</id>
        <modules>
            <module>child-module-two</module>
        </modules>
    </profile>
</profile>

如果您在父级别触发 Maven 构建阶段(在此示例中编译),并激活此配置文件 - 例如

mvn compile -P include

您将包括您的第二个子模块。如果您要避免激活该配置文件,例如只需运行:

mvn compile

那么您的第二个子模块不包括在内。

于 2012-07-19T16:29:15.697 回答
0

我认为当前的 Maven 实现没有任何这样的选择。

您可以尝试一件事:创建另一个只有前 4 个子项目的项目。因此,当您只需要构建 4 而不是 5 时,请使用那个。

您不必为此创建另一个父项目。有关这方面的更多信息,请参阅Maven 项目的聚合。

于 2012-07-19T16:13:13.033 回答
-1

简单的答案没有这样的选择。

避免在发布等期间出现问题的最佳解决方案是使用配置文件,但不要在子模块本身中更好地使用模块级别:

在子模块中,使用配置文件来激活/停用所需的操作。

<profiles>
  <profile>
     <id>whatEver</id>
     <build>
      ...
     </build>
  </profile>
</profiles>
于 2012-07-19T16:13:55.697 回答