【问题标题】:Execute a Maven command on a file recursively递归地对文件执行 Maven 命令
【发布时间】:2017-09-22 12:43:41
【问题描述】:

我有一个非常复杂的多模块 Maven 项目,其中包含嵌套项目。 基本上,问题可以简化为这个配置:

    Project A
|   pom.xml
|   pomBis.xml
|
|---- Project B
        pom.xml
        pomBis.xml
        ---- Project D
            pom.xml
        ---- Project E
            pom.xml
|---- Project C
        pom.xml

Project A 的 pom 有 Project BC 作为模块。而在Project B的pom中,我只有Project D。因为Project E是一个非常大的项目,我们不需要每天编译,所以不包括在日常构建中。

我现在想执行一个 Maven 命令,例如 versions:update-parent。我希望更新我的所有项目和子项目。如果我使用 pom.xml,Project E 将不会被更新,因为它没有被声明为 Project B 的子模块。

我想创建一个可以使用的自定义 pomBis.xml。但是如果我在每个子项目上创建一个 pomBis.xml 并运行命令,则只使用 Project A 的 pomBis.xml。当 Maven 深入时,它会回退到正常的 pom.xml。

我看到的唯一解决方案是在 Project A 中创建一个 pomBis.xml,它将列出所有子模块并真正列出所有叶子项目。

我是不是搞错了?

【问题讨论】:

  • 项目 C 在您的树中出现两次。你能纠正一下吗?
  • 谢谢,已更正。
  • 如果您将整个结构正确处理为单个多模块构建,您可以使用mvn -pl projectToBuild 控制将要构建的内容,此外您可以根据给定的 projectToBuild 定义应该构建的内容,这取决于通过mvn -pl projectToBuild --also-make-dependent。除此之外,您可以在 Jenkins 中使用增量构建来仅构建已更改的内容...

标签: java maven multi-module maven-versions-plugin


【解决方案1】:

Maven 配置文件就是答案。

项目 A POM:

<pom>
.
.
.
<modules>
    <module>B</module>
    <module>C</module>
<modules>
</pom>

项目 B POM:

<pom>
.
.
.
<profiles>
    <profile>
        <id>includebeast</id>
        <modules>
            <module>E</module>
        <modules>       
    </profile>
</profiles>
<modules>
    <module>D</module>
<modules>
</pom>

现在,当您希望您的 maven 命令影响您的所有项目时,请激活配置文件“includebeast”,如下例所示:

全部编译示例:mvn clean compile -P includebeast

【讨论】:

  • 谢谢,我也会链接到这个问题:stackoverflow.com/questions/10682186/… 因为默认模块包含在您的个人资料中。如果我只想要我的个人资料中的模块,我可以使用激活。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多