如何在 maven 中管理多应用项目?



>我目前正在尝试将多应用程序项目从Ant迁移到Maven
目前,该项目由多个包组成,创建某种依赖树,没有循环依赖关系。这棵树的叶子是"应用程序"包,包含一个Main。中间节点是"库"包,由其他库"包"或"应用程序"包使用。
允许节点"一起增长"到单个节点或叶子。 我想出,这些包可能应该分组到 maven 模块中,我现在有一个类似于这样的结构:

root
- lib1
- lib1A (depends on lib1)
- lib1B (depends on lib1)
- app1A (depends on lib1A)
- lib2  (depends on lib1B)
- lib2A (depends on lib2)
- lib2B (depends on lib2)
- app2  (depends on lib2A and lib2B)
- lib3  (depends on lib2A and lib2B)
- app3A (depends on lib3)
- app3B (depends on lib3)

基本上,一个库和一个应用程序可以依赖于一个或多个其他库。
现在,我希望能够自己构建每个应用程序,并为其创建一个可执行的jar。
我现在尝试这样做的方式如下:

  • 配置每个apppom.xml,以使用maven-assembly-plugin创建可执行 JAR。
  • 为特定应用构建所需的每个模块。
  • 构建应用程序模块,这将产生一个可执行的 jar。

因此,为app2而构建将构建lib1lib1Alib1Blib2lib2Alib2B,最后app2
但是,为了自动化构建,我需要为每个应用程序创建一个构建脚本,该脚本负责构建所有需要的依赖项,maven 应该已经自己完成了。
此外,如果我想一次构建多个应用程序,我需要多次构建所有库,或者自己跟踪已经构建的模块。
由于我是 maven 的新手,我不确定这是否是管理这样一个多应用程序项目的正确方法。
因此,我正在寻求有关如何正确管理此用例的一些建议。

编辑:澄清我希望能够做什么:

  • 使用其依赖项构建单个应用程序, 无需构建所有应用程序(在父 POM 上运行 Maven(。
  • 使用依赖项生成多个应用(不是全部(,而无需多次生成依赖项。

如果您在相应的POM中定义依赖项并构建整个项目(在根级别(,则Maven会自动按拓扑顺序对模块进行排序,这意味着构建每个模块一次,并且一切都以正确的顺序完成。

我现在使用父项目,它定义了 maven 版本、通用依赖项和通用插件配置。
父项目还在module-tag 中定义其子模块。
每个子模块都引用此父项目并使用相同的版本。
为了构建应用程序,我正在使用-pl-am标志在父项目中运行 maven,如本评论中所述。
-pl标志告诉 maven 只构建列出的模块,而不是构建整个项目。
-am标志告诉 maven 也构建所需的依赖项。
示例:给定以下结构:

parent
---- lib1
---- lib1A (depends on lib1)
---- lib1B (depends on lib1)
---- lib2 (depends on lib1B)
---- lib2A (depends on lib2)
---- lib2B (depends on lib2)
---- app1A (depends on lib1A)
---- app2A (depends on lib2A)
---- app2B (depends on lib2B)

执行mvn clean install -pl app1A,app2A -am将构建除app2Blib2B之外的所有模块。
此外,app1Aapp2A使用的模块lib1只会构建一次。

通常,您希望独立地对每个模块进行版本控制,但在我们的情况下,这将带来巨大的努力,因为我们有很多模块相互构建。"最低"模块(示例中lib1(中的微小更改会导致几乎每个模块的更改。
因此,在这种情况下,我们需要增加每个版本号并更新所有模块中所有引用的依赖项。
相反,我们决定始终重建所有依赖项,从而生成始终最新的 Jar。这就是为什么我们只管理父项目中的 maven 版本。

我认为使用 maven多模块,您只需要导航到要构建的模块,然后从那里运行 maven 命令。Maven 将自动构建具有关联依赖项的模块,而无需构建不必要的模块。

编辑:原来的答案不正确,做了一些测试后,我发现以下内容应该有帮助: Maven 模块 + 构建单个特定模块 你只需要在从父级构建特殊模块时添加 -pl 和 -am 标志。

最新更新