我希望设置一个多模块的Maven项目(如下所述),以便良好扩展。我对这种方法有一些疑问,这主要是从Sonatype example中汲取的。
我已经阅读了一定数量的关于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)
我知道项目结构不是固定不变的。我想设置一个良好的起点。欢迎提供建议/示例链接。