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

Posted

技术标签:

【中文标题】Tycho 的 Maven 多模块中的自定义 pom.xml 文件名【英文标题】:Custom pom.xml filename in Maven multimodule for Tycho 【发布时间】:2015-10-28 16:25:08 【问题描述】:

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

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

我无法轻松使用 IntelliJ 处理具有 Maven 依赖项管理的独立项目,因为它无法将自定义 pom-standalone.xml 文件名识别为 POM。

为了 Tycho 和 Eclipse Manifest 文件,该项目所依赖的许多 jar 被签入到项目中,但它们也由 Maven 管理以用于独立构建。因此,必须将任何依赖项添加到 pom-standalone.xml 文件中并输入 OSGi 清单并签入源代码控制以用于 Eclipse。

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

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

是否有替代解决方案? Eclipse/Tycho/p2 构建似乎有点令人头疼,需要手动库管理和签入库以进行源代码控制,但在过去几年中,Eclipse 构建世界中可能发生了一些我不知道的变化。

找到了一个没有多大帮助的Similar Question。

【问题讨论】:

【参考方案1】:

您可以通过为具有自定义名称的 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 构建。

【讨论】:

谢谢!我在任何地方都找不到该信息。现在,如果我知道如何避免为 Eclipse 构建检查所有这些 jar。 @tdm - 如果你的 jars 是 mvn install 到本地 maven 存储库,或者 mvn deploy 到远程 maven 存储库,那么你的 pom 可以将它们列为依赖项,maven 将检索它们以用于建造。告诉 Eclipse 执行 maven update 以获取 pom 中的任何更改。【参考方案2】:

扩展@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,您需要为每个子模块完全指定。

【讨论】:

以上是关于Tycho 的 Maven 多模块中的自定义 pom.xml 文件名的主要内容,如果未能解决你的问题,请参考以下文章

在集成 Maven、Tycho 和 Eclipse 时处理非 OSGi 依赖项

不可解析的构建扩展:插件org.eclipse.tycho:tycho-maven

Android Gradle 插件自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 Maven 仓库中的自定义 Gradle 插件 )

Drupal 8 更新自定义模块的 language.po 文件

如何用maven tycho构建自己的Eclipse RCP应用

如何在非 Tycho 项目中使用 pomless tycho 工件