我希望建立一个可以很好地扩展的多模块maven项目(如下所述)。我对这种方法有一些疑问,主要来自Sonatype example。
我已经对maven多模块项目进行了一定程度的阅读,但找不到超出基本级别的示例。
模块化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)
我理解项目结构不是一成不变的。我想建立一个很好的起点。欢迎提出建议/链接示例。
答案 0 :(得分:3)
对于春季部分,已经讨论过,Spring Configuration in a multi-module project接受了答案。就一般布局而言,我只看到每个项目和服务只有一个WAR捆绑在一起,如果它们是相关的(例如,UserLoginService不会与DomainObjectsService一起使用)。
我建议将结构分解为几个不同的项目,将依赖项(业务对象等)作为JAR项目部署到本地存储库,并在需要它们的(现在不同的)项目中列为普通的Maven依赖项。然后,在您的应用服务器中,您可以将应用部署到不同的路径(例如yourdomain.com/app1,youdomain.com/service2)。
我对你的抱负表示赞赏!
编辑:如果您愿意,可以使用多种WAR,请参阅有关Using a shared parent application context in a multi-war Spring application的SpringSource博客文章。
答案 1 :(得分:0)
从Spring IO到工件的层次结构可以作为单个构建多模块项目完成。
Spring-IO (dependencies)
- Your parent pom (custom and further dependency management, plugins etc)
- someapp-parent (really just a container for each -independent- sub-module)
someapp-api (deploy as jar into Nexus
someapp-remote (Implements API and makes REST calls to your web app - also an independent jar)
someapp-web ('war' Exposes REST - JSON - representations of your API domain objects)
someapp-dashboar (Admin console working with the API/web app via remote so you can manage everything, also a 'war')
Spring IO是BTW非常好的作为一组有福的依赖项,可以很好地协同工作并避免类加载器问题。非常值得迁移您的项目以使用它作为最新版本看起来非常新。我还建议您使用Spring Boot作为您的网络应用程序。
如上所述,我认为将所有与应用程序相关的模块构建为一体是值得的,因此版本控制更容易,您可以在单个构建命令中测试所有内容。我最近在一个项目上工作,我们将所有这些模块分开,它只意味着合并更改,构建工件,部署工件等的4倍。