Maven,Spring配置多模块项目

Jet*_*eam 8 java spring maven

我希望建立一个可以很好地扩展的多模块maven项目(如下所述).我对这种方法有一些疑问,主要来自Sonatype示例.

我已经对maven多模块项目进行了一定程度的阅读,但找不到超出基本级别的示例.

问题:

  1. 这(下面)是一个好的项目结构吗?或者从一开始就闻到了灾难的味道 - 即在建立构建时会导致重大的重组吗?简而言之,我希望避免设置与Maven相悖的东西.
  2. 我期待一些模块完全独立,而大多数模块将是相互关联的.是否可以从每个模块开始作为Git仓库,然后重新组合紧密链接的模块?

目标:

  1. 模块化Spring,JSF2,Maven项目的良好项目结构,允许涉及选择模块及其依赖项的构建.

  2. 应该可以通过Maven配置(如jetty-maven-plugin)在像Tomcat/Jetty这样的轻量级容器上部署单个Web模块.这应该能够通过Maven引入必要的依赖关系.这使得在开发过程中很容易专注于正在处理的模块(不必运行完整的构建和部署),并且只在完整的构建中部署完整的应用程序.

  3. 设置应允许基于要在构建中包含的模块选择的多个分发.我认为这可以通过使用构建模块来实现,这些模块将拉动和打包相应的模块.

项目结构

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)
Run Code Online (Sandbox Code Playgroud)

我理解项目结构不是一成不变的.我想建立一个很好的起点.建议/链接到示例是受欢迎的.

小智 3

对于 Spring 部分,它已经进行了讨论,并且在多模块项目中的 Spring Configuration中接受了答案。就总体布局而言,我只看到每个项目有一个 WAR,并且只有相关的服务才捆绑在一起(例如 UserLoginService 不会与 DomainObjectsService 一起使用)。

我建议将结构分解为几个不同的项目,将依赖项(业务对象等)作为 JAR 项目部署到本地存储库,并在需要它们的(现在不同的)项目中列为正常的 Maven 依赖项。然后在您的应用程序服务器中,您可以将应用程序部署到不同的路径(例如 yourdomain.com/app1、yourdomain.com/service2)。

不过,我还是对你的雄心壮志表示赞赏!

编辑:如果您愿意,有一种方法可以拥有多个 WAR,请参阅这篇关于在多战争 Spring 应用程序中使用共享父应用程序上下文的SpringSource 博客文章。