有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java基于项目类型创建许多Maven父POM有意义吗?

我正在努力理解组织Maven项目的最佳方式是什么。 假设我有这些项目-

  • ProjectA-webapp使用Spring MVC
  • ProjectB-util Library 1, 使用日志、snakeyml
  • ProjectC-util library2,使用日志, 毒蛇
  • ProjectD-DAO库,使用日志记录,使用Spring注释

A依赖于D,D依赖于C。B不依赖于任何东西

我用snakeyml、slf4j和log4j作为依赖项创建了一个父pom项目。我在B、C和D poms中将该项目声明为父项目。父pom还定义特定于编译器的属性

我的理解是,当您将某个对象声明为父对象时,poms中的Maven继承允许子项目继承所有依赖项。如果这是正确的,我应该有多个父POM吗?比方说,就像父pom一样,是否应该有一个所有spring项目都将从中继承的父spring pom?有这么多不同的父级,只是为了更好地组织依赖关系,而没有合理的项目层次结构,这是一种好做法吗?此外,我并没有将子项目声明为父项目中的模块,因为其中一些是独立的库。我是否偏离了Maven的惯例太多了


共 (1) 个答案

  1. # 1 楼答案

    你不应该根据所使用的技术来分组项目,而应该根据它们的功能来分组

    我们现在考虑创建一个父项目^ {CD1>},它将有子Spring项目。如果明天您决定从Spring切换到JSF呢?还是一个自主开发的框架?更糟糕的是,你想切换其中一个项目,而不是全部项目?你必须更改每个模块的名称,这是一件痛苦的事。某事物的名称不应该是关于如何,而应该是关于什么

    在Maven和多模块项目中也是如此

    请注意,在您的用例中,我看不到有多个父母的附加值。我觉得这比什么都复杂。但你可以通过网络应用、核心实用程序、数据访问等方式对项目进行分组

    作为一个例子,假设您有一个访问多个端点(例如Web服务和数据库)的数据访问层。将它们分组在一个名为project-dao的公共父级中,并具有模块project-dao-wsclient(其中将包含访问web服务的特定代码)和project-dao-db(其中将包含访问数据库的特定代码),这可能是有意义的