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 楼答案
你不应该根据所使用的技术来分组项目,而应该根据它们的功能来分组
我们现在考虑创建一个父项目^ {CD1>},它将有子Spring项目。如果明天您决定从Spring切换到JSF呢?还是一个自主开发的框架?更糟糕的是,你想切换其中一个项目,而不是全部项目?你必须更改每个模块的名称,这是一件痛苦的事。某事物的名称不应该是关于如何,而应该是关于什么
在Maven和多模块项目中也是如此
请注意,在您的用例中,我看不到有多个父母的附加值。我觉得这比什么都复杂。但你可以通过网络应用、核心实用程序、数据访问等方式对项目进行分组
作为一个例子,假设您有一个访问多个端点(例如Web服务和数据库)的数据访问层。将它们分组在一个名为
project-dao
的公共父级中,并具有模块project-dao-wsclient
(其中将包含访问web服务的特定代码)和project-dao-db
(其中将包含访问数据库的特定代码),这可能是有意义的