【发布时间】:2015-04-29 02:23:55
【问题描述】:
我希望建立一个可以很好扩展的多模块 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)
我了解项目结构并非一成不变。我想建立一个很好的起点。欢迎提出建议/示例链接。
【问题讨论】: