第谷的 Maven 多模块中的自定义 pom.xml 文件名

Custom pom.xml filename in Maven multimodule for Tycho

我有一个包含几十个 Eclipse 插件的项目,它们相互关联并且位于不同的子文件夹中。该构建在几年前转换为多模块清单优先 Tycho 构建,并且运行良好。

其中一个插件相当关键,也可以构建为独立的 Java 应用程序,它不使用 Eclipse 运行时。目前它有自己的 POM 文件(pom-standalone.xml),因此 Jenkins 可以单独构建独立应用程序,而 Tycho 构建对此一无所知 - pom-standalone 仅列出先前构建的插件 jar(感谢 Tycho! ) 和它需要作为依赖项的 Eclipse 库。不过,这种方法存在一些问题:

似乎一个简单的解决方法是告诉 Tycho/modules 对子模块的 POM 或所有多模块 POM 文件使用 pom.xml 以外的东西,因为 Eclipse 不使用那些无论如何 - 然后 pom-standalone.xml 可以转换为 pom.xml 然后 IntelliJ 就可以了。

我知道您可以为 Maven 构建指定 -f 属性,但这真的适用于所有子模块吗?你能为一个子模块指定 POM 文件名吗?

是否有替代解决方案? Eclipse/Tycho/p2 构建似乎有点令人头疼,需要手动管理库并将库签入源代码管理,但也许过去几年 Eclipse 构建世界发生了我没有意识到的变化。

找到一个 Similar Question 并没有太大帮助。

您可以通过为具有自定义名称的 POM 文件指定全名来将项目包含在聚合器 POM 中。示例:

<modules>
    <module>org.example.bundle1</module>
    <module>org.example.bundle2</module>
    <module>org.example.keybundle/pom-tycho.xml</module>
</modules>

这都适用于纯 Maven 和 Maven/Tycho 构建。

稍微扩展一下@oberlies 的回答:

场景:顶级聚合 POM 有多种风格,因此可以从顶部构建任何样式。

<!-- in file pom.xml -->
<modules>
  <module>org.example.bundle1</module>
  <module>org.example.bundle2</module>
  <module>org.example.keybundle</module>
</modules>

所有子模块都将使用它们的标准构建 pom.xml

<!-- in file pom-tycho.xml -->
<modules>
  <module>org.example.bundle1/pom.xml</module>
  <module>org.example.bundle2/pom.xml</module>
  <module>org.example.keybundle/pom-tycho.xml</module>
</modules>

将使用专门命名的 POM 文件构建子模块。

并且,同样地:

<!-- in file pom-special.xml -->
<modules>
  <module>org.example.bundle1/pom.xml</module>
  <module>org.example.bundle2/pom-special.xml</module>
  <module>org.example.keybundle/pom-tycho.xml</module>
</modules>

具有自定义 POM 文件的子模块使用它们,而其他子模块则表示他们仍然需要普通的 POM 文件,所有这些都与顶级聚合 POM 文件的名称无关。

因为mvn -f pom-tycho.xml 假定 所有 子模块中的文件名。因此,如果您确实希望在未命名顶级文件 pom.xml 时在任何子模块中使用 pom.xml,则需要为每个子模块完全指定。