第谷的 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 库。不过,这种方法存在一些问题:
我无法轻松地使用 IntelliJ 处理具有 Maven 依赖项管理的独立项目,因为它无法将自定义 pom-standalone.xml
文件名识别为 POM。
- 为了 Tycho 和 Eclipse Manifest 文件,此项目所依赖的许多 jar 已签入项目,但它们也由 Maven 管理以用于独立构建。因此,任何依赖项都必须添加到
pom-standalone.xml
文件中,并输入到 OSGi 清单中,并签入源代码管理以供 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
,则需要为每个子模块完全指定。
我有一个包含几十个 Eclipse 插件的项目,它们相互关联并且位于不同的子文件夹中。该构建在几年前转换为多模块清单优先 Tycho 构建,并且运行良好。
其中一个插件相当关键,也可以构建为独立的 Java 应用程序,它不使用 Eclipse 运行时。目前它有自己的 POM 文件(pom-standalone.xml
),因此 Jenkins 可以单独构建独立应用程序,而 Tycho 构建对此一无所知 - pom-standalone
仅列出先前构建的插件 jar(感谢 Tycho! ) 和它需要作为依赖项的 Eclipse 库。不过,这种方法存在一些问题:
我无法轻松地使用 IntelliJ 处理具有 Maven 依赖项管理的独立项目,因为它无法将自定义
pom-standalone.xml
文件名识别为 POM。- 为了 Tycho 和 Eclipse Manifest 文件,此项目所依赖的许多 jar 已签入项目,但它们也由 Maven 管理以用于独立构建。因此,任何依赖项都必须添加到
pom-standalone.xml
文件中,并输入到 OSGi 清单中,并签入源代码管理以供 Eclipse 使用。
- 为了 Tycho 和 Eclipse Manifest 文件,此项目所依赖的许多 jar 已签入项目,但它们也由 Maven 管理以用于独立构建。因此,任何依赖项都必须添加到
似乎一个简单的解决方法是告诉 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
,则需要为每个子模块完全指定。