当前位置: 首页 > 知识库问答 >
问题:

Maven多模块项目结构化问题

李锦
2023-03-14

好吧,这是一个有趣的经验,我有一个结构我的maven多模块项目的前几个星期。

当我决定使用maven进行构建生命周期管理时,我有两个理由希望选择maven。

a.大多数开发团队都是被划分的,这样每个团队就可以在项目中的单独模块上工作,比如团队-A工作在用户管理系统上,团队-B工作在授权系统上,团队-C工作在文档管理系统上……等等。每个团队都有java开发人员、测试人员、UI专家等。

因此我得出结论,maven多模块项目的每个开发模块都必须表示一个功能模块

经过一些论坛上的讨论,我发现有人建议我遵循分层方法,如果子模块必须是像控制器层、服务层、DAO层等层,我没有注意这个建议,因为这不能解决我的团队在单个模块上工作的目的。这样,对于大型项目,每个团队在开发期间的构建和部署时间会增加,这确实会影响项目的时间线。有时构建和部署的时间最多为30分钟,比如项目中有10到11个模块。

但是我确实注意到了一个建议,即为每个模块保留单独的DAO层不是一个好主意,因为DAO是高度粒度的,并且被其他模块重用。因此一个模块对另一个模块的依赖性将会变得更大。

现在,当我构建项目并在服务器上运行webapp时,它会抱怨404,找不到资源。我发现这是因为web-inf/classes文件夹丢失了,web-app模块中src/main/java丢失了。我搜索并发现了几个链接,表明这是Eclipse中的部署程序集问题。所以我需要手动创建这些文件夹,并添加到部署程序集中,因为maven没有这样做。

但更大的问题是

  1. 我是否需要移动控制器类,如com.mycompany.usermgmtsys.Controller.usermgmtcontroller等。到src/main/java或maven应该从作为依赖项包含在web-inf/lib中的模块jar中找到控制器。

共有1个答案

郝池暝
2023-03-14

这就是eclipse呈现基于maven的项目的方式。它通常创建两个结构。一个基于主pom(父项目),另一个基于单个模块pom。然而,任何结构的变化都会反映在另一个结构中。作为一种实践,我会改变单个模块文件夹结构,并且更容易阅读。

就我个人而言,我尽量避免多模块项目,因为如果您正在使用Maven发布插件,那么您将被锁定在一起发布所有模块。

虽然这听起来很方便,但当您需要对其中一个模块进行bug修复发布时,问题就出现了--您最终释放了所有模块,而不仅仅是带有bug修复的模块,即使它们没有更改,也会增加它们的版本。

因此,使用独立的模块,但这是重要的一点,创建一个共同的“依赖”pom,由每个模块使用。

“dependency”pom是一种将项目中的所有依赖项标准化的pom,不同之处在于这些依赖项是在dependencyManagement部分而不是dependencies部分中指定的(它还设置标准插件配置等)。这允许您的项目pom指定依赖项pom作为它们的父项,然后声明它们需要的依赖项减去版本,这些版本是从“依赖项”pom中提取的,从而在您的项目中标准化的。

如果您仍然关心是否能够构建所有内容,那么这可以通过一个简单的批处理文件来实现。

 类似资料:
  • 嗨我在网上搜了一遍,看了一堆文章,所以问题和文档都找不到解决办法,这里是我的问题。 我有一个多模块maven项目,其中包含三个模块a、B和C,a和B独立,C依赖于a和B,当然我有一个父项目。我还设置了一个jenkins服务器来构建这些项目,以及一个nexus存储库。 如有任何帮助,不胜感激。谢谢!

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并

  • 我有一个多模块maven应用程序,我们需要通过Jenkins构建。项目结构如下: 现在,mvn清洁安装-fa.xml工作正常。为此,我创建了一个詹金斯的工作。现在,和a.xml一样,我有另一个项目b.xml.b.xml有和a.xml相同的代码,除了不同的Ids。所以,我又为詹金斯创造了一份工作b.xml.两份工作都很好。但是,现在我想根据我们在Git中提交的项目,从单个Jenkins工作中构建这两

  • 问题内容: 我有一个多模块Maven项目,其中有多个微服务作为模块,因此我的父母中列出了一些模块,如下所示: 这里是依赖项,因此我在下面列出了依赖项 : 当我在本地运行时,按预期方式在被调用之前,但是在詹金斯中,它正在尝试构建然后使构建失败说: 我是否需要运行其他作业或重新排序模块,从本地到Jenkins有什么不同?感谢对此的任何帮助。 问题答案: 众所周知,问题在于子模块之间的依赖关系失败,因为

  • 关于maven项目结构,我有两个问题: 1)我正在创建一个maven多模块项目,并且想知道是否可以将模块的所有公共依赖项放在父POM中?这是正确的做法吗? 2)如果我正在创建一个包含所有web.xml和JSP文件的maven webapp项目,那么web控制器、侦听器和模型对象应该驻留在哪里?在一个单独的maven jar项目中还是在同一个webapp项目中?

  • 好吧,我就直接说吧。我有一个使用Spring的多模块maven项目。项目结构可概括如下: 在本例中,根级pom文件将spring-boot-starter声明为父级: > 我可以分离出依赖项,以便模块1和模块2将spring-boot-starter-parent作为它们的父项,并从根pom中删除spring-boot-starter,从而释放common。 我可以将根pom作为父级删除到Comm