为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2023-10-12 20:43:07
我目前正在尝试将多应用程序项目从 迁移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。我现在尝试执行的方法如下:配置用于创建可执行 jar 的pom.xmlevery 。appmaven-assembly-plugin为特定应用程序构建每个所需的模块。构建应用程序模块,这会生成可执行 jar。因此,构建app2将构建lib1、lib1A、lib1B、lib2、lib2A和lib2B最后app2。然而,为了自动化构建,我需要为每个应用程序创建一个构建脚本,它负责构建所有需要的依赖项,而 Maven 应该已经自己完成了。另外,如果我想一次构建多个应用程序,我需要多次构建所有库,或者自己跟踪已经构建的模块。由于我是 Maven 新手,我不确定这是否是管理此类多应用程序项目的正确方法。因此,我寻求一些有关如何正确管理此用例的建议。编辑:为了澄清我希望能够做什么:使用其依赖项构建单个应用程序,而不构建所有应用程序(在父 pom 上运行 Maven)。构建多个应用程序(不是全部)及其依赖项,而无需多次构建依赖项。
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-10-12
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我现在使用一个父项目,它定义了maven版本、公共依赖项和公共插件配置。
父项目还在module-tags 中定义了它的子模块。
每个子模块都引用该父项目并使用相同的版本。
为了构建应用程序,我在父项目中运行 Maven,使用-pl和标志。 该标志告诉 Maven 仅构建列出的模块,而不是构建整个项目。 该标志告诉 Maven 还构建所需的依赖项。 示例: 给定以下结构:
-pl
-am

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之外的所有模块。 此外, module被使用且仅被构建一次。 app2Blib2B

lib1app1Aapp2A


通常,您希望独立地对每个模块进行版本控制,但在我们的例子中,这将带来巨大的工作量,因为我们有很多模块构建在彼此之上。“最低”模块(lib1在示例中)的微小变化将导致几乎每个模块的变化。

因此,在这种情况下,我们需要增加每个版本号并更新所有模块中所有引用的依赖项。

相反,我们决定始终重建所有依赖项,从而生成始终最新的 Jar。这就是为什么我们只管理父项目中的maven版本。


查看完整回答
反对 回复 2023-10-12
?
狐的传说

TA贡献1804条经验 获得超3个赞

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

查看完整回答
反对 回复 2023-10-12
  • 3 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信