我开发内部Java EE应用程序。它们都共享核心功能集,例如JPA Entities (Employee.class), Session Beans (EmployeeService.class), Filters (Authenticate.class), Logging (Log4J2)
等......
我创建了一个Java Utility
项目,并将这些类com.mydomain.mylastname.core.(filter|domain|loggin)
打包到.jar中。
然后我将使用JBoss Central start from scratch
我一直将core
作为POM依赖项包含在内。这是正确的方法,还是我应该做多模块或耳朵?
我问,因为我有另一个案例,webapp项目不断扩展,我在同一个Eclipse项目中用包文件夹分隔了更多功能。
com.mydomain.mylastname.functionality1
com.mydomain.mylastname.functionality2
com.mydomain.mylastname.functionality3
我认为将每个功能包重新组织并移动到自己的Eclipse / Maven项目中会更有意义。这样,如果只有一件更新,我就不必重新部署大量未更改的源代码。
但是,我如何将它们打包成一个可部署的app / frontend呢?作为EAR还是MultiModule?每个功能基本上都是网页导航菜单中的下拉菜单。也许我让这个太复杂了,最简单的方法是让HTML前端简单指向每个单独部署的应用程序......但是我的菜单栏需要在所有三个应用程序中维护。我想分享所有(JSF)模板,css,图像。
任何建议都非常感谢。
答案 0 :(得分:1)
如果我理解正确,这是你的基本问题:你的网络应用程序项目中有很多独立的软件包。您不确定是否要将它们作为单独的maven模块。
以下几点需要考虑:
答案 1 :(得分:1)
这更多是个人选择,但是在编写基于多模块和依赖项的项目后,我更倾向于使用依赖项。
我的理由是:
mvn clean verify
,这会降低你的速度。关于第二个问题:如何部署它们。
如果他们必须以模块(耳朵)的形式运行,那么策略就是尽可能地将依赖关系隔离到可重用的组件中,这些组件可以被一个非常基本的Web shell使用,它可以支持Web服务器。例如,您可以拥有一个加载依赖项的模块。
另一个替代方案是创建一个作为ear文件的依赖项,并且有一个maven汇编程序将依赖项打包为app。这可能比为依赖项定义瘦shell更简单。以下是有关如何使用汇编程序插件从依赖项创建应用程序的参考:http://maven.apache.org/plugins/maven-assembly-plugin/
编辑: 日历,分享照片,聊天等...
他们之间的互动方式远远超出了Maven和模块/依赖关系。例如,版本控制很重要吗?您可以针对日历版本3部署聊天版本4吗?他们共享同一个数据库吗?对数据库的正常运行时间有哪些要求?它是分布式应用程序吗?
这个列表一直在继续,一个简单的答案变得越来越难。
假设您拥有支持上述所有内容的基础架构,并且您正在寻找的是指南,那么我会说Calendar,Photoshare,Chat实际上是具有既定合同的服务。在这种情况下,我会将它们分成不同的项目,原因很简单,不同的团队可以更容易地独立工作。我在此考虑,随着这些服务功能的增长,您将需要专门的团队,为此,最好的选择是项目。与Maven无关,只是上市时间。
答案 2 :(得分:0)
我认为我们必须首先明确多模块和耳朵这两个术语。多模块是Maven项目结构,其中每个模块都生成自己的工件。耳是企业档案,可以是其中一个模块的结果。
选择结构取决于发布周期。如果所有工件总是一起发布,则应将它们放在单个多模块项目中。如果其中一个工件(例如实用工具)被多个项目使用,则不要将其用作多模块项目的一部分。