我正在寻找一个可以很好地扩展的多模块 maven 项目(如下所述)。我对主要来自Sonatype 示例的方法有一些疑问。
我已经对 Maven 多模块项目进行了一定程度的阅读,但找不到超出基本水平的示例。
问题:
- 这是(下)一个好的项目结构吗?或者它从一开始就充满了灾难的味道 - 即在建立构建时会导致大量重组?简而言之,我希望避免设置与 Maven 相悖的东西。
- 我期望一些模块是相当独立的,而大多数模块是相互关联的。是否可以将每个模块作为 Git 存储库开始,然后在紧密链接的模块中重构?
目标:
模块化 Spring、JSF2、Maven 项目的良好项目结构,这将允许构建涉及选择的模块及其依赖项。
应该可以通过 Maven 配置(如 jetty-maven-plugin)在轻量级容器(如 Tomcat/Jetty)上部署单个 Web 模块。这应该能够通过 Maven 引入必要的依赖项。这使得在开发过程中可以很容易地专注于正在处理的模块(不必运行完整的构建和部署)并仅在完整的构建中部署完整的应用程序。
该设置应允许基于要包含在构建中的模块选择进行多个分发。我认为这可以通过使用构建模块来实现,该模块将拉取并打包相应的模块。
项目结构
Core domain classes.
somapp.core (maven project)
|- someapp.core (maven module)
|- someapp.core.tests
Account Management Domain classes
someapp.accountmgmt
|- someapp.accountmgmt
|- someapp.accountmgmt.tests
component1 domain classes
someapp.component1
|- someapp.component1
|- someapp.component1.tests
Service 1 - # account management (User login)
someapp.accountmgmt
|- someapp.accountmgmt.api
|- someapp.accountmgmt.impl
|- someapp.accountmgmt.mocks
|- someapp.accountmgmt.tests
someapp.service2
|- someapp.service2.api
|- someapp.service2.impl
|- someapp.service2.mocks
|- someapp.service2.tests
|- someapp.service2.cli # CLI access for service2
someapp.service3
|- like above
someapp.accountmgmt.web
|- someapp.accountmgmt.web
someapp.service2.web
|- someapp.service2.web
someapp.service3.web
|- someapp.service3.web
someapp.build1 # bundle accountmgmt and service2 into 1 war file
someapp.build2 # bundle accountmgmt and service3 into 1 war file
somapp.build3 # bundle accountmgmt, service2 and service3 into 1 war file
(i.e. someapp.accountmgmt.web.war, someapp.accountmgmt.jar, someapp.service2.web.war, someapp.service2.jar, someapp.service3.web.war, someapp.service3.jar, someapp.core.jar)
我了解项目结构并非一成不变。我想建立一个很好的起点。欢迎提出建议/示例链接。