1

简而言之,我想做的是一次构建一堆库和应用程序,所有 Maven 项目。据我了解,仅在一个命令行运行中完成此操作的一种方法mvn package是创建一个多模块项目,该项目将列出我想要构建的每个模块,将它们放入 Maven 反应器中,然后构建。

按照 Maven 书中的示例,通常多模块似乎pom位于各个模块上方的目录中。但是,通常情况下,父pom级位于模块上方的目录中,这引发了一个问题,通常情况下,多模块构建也应该是父级吗?我想不是; 但是我想知道为什么我会遇到这个有趣的设计怪癖。

所以,我想知道设置它的正确方法。我看到以下约定/要求:

  • pom模块必须知道其他模块在磁盘上的位置。由于它实际上是从源代码构建它不能简单地依赖已安装的版本(因为它正在安装它们!)
  • 父级实际上不必是物理目录,尽管这样会更好。我认为这是最好打破的惯例。
  • 实际上,各个库/应用程序甚至不需要知道它们是作为多模块构建的一部分构建的。

这通常如何在多模块构建中设置?有没有更简单的方法来一次管理构建多个 Maven 项目?

4

2 回答 2

1

我将所有单独的模块放在根模块中。 一些软件存在多层层次结构的问题。

要使子模块在同一级别引用它的父模块:

<parent>
    <groupId>com.domain</groupId>
    <artifactId>xyz</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../xyz/pom.xml</relativePath>
</parent>

我建议你不要在单个模块需要继承的多模块(例如属性)中放置任何东西。如果这样做,您将无法独立构建其他模块。

于 2012-12-31T17:20:52.013 回答
0

我什至会说这是“公约”的模糊部分。文档和常识都表明项目聚合(也称为多模块构建)和继承是为处理不同用例而提供的两种不同机制。

同时,似乎有一个事实上的约定(是的,我知道)将项目聚合和继承父角色组合到一个 pom.xml 中。事实上,父声明的元素和项目聚合机制的模块元素似乎都在引导使用这种组合。

就个人而言,我发现定期将父 pom 分开非常有用。而且我还发现将父 pom 定位在我的源代码管理中一个完全分离的位置很有用,因此我的文件夹结构也是如此。但是,在源代码控制/文件夹结构中定位属于同一多模块构建结构的构建似乎很少有用。也许这甚至可以很好地衡量某些东西是否应该包含在同一个聚合构建中;如果它似乎值得在源文件夹结构中搭配,那么它可能是聚合的有力候选者。

我唯一确定的是,这些事情值得花时间整理。在不创建整体构建结构方面出错可能会更好。. . 处理大量不必要的聚合父子构建模块非常困难。另一方面,聚合单个构建以一起运行是更高级别提供的功能,例如 CI 构建服务器。所以,我想我可能会建议在更多独立性方面犯错。

于 2012-12-31T21:36:24.410 回答