【问题标题】:Custom pom.xml filename in Maven multimodule for TychoTycho 的 Maven 多模块中的自定义 pom.xml 文件名
【发布时间】: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

【问题讨论】:

    标签: maven maven-3 tycho


    【解决方案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,您需要为每个子模块完全指定。

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2011-08-19
      • 2018-12-17
      相关资源
      最近更新 更多