gpt4 book ai didi

java - 这是在多模块项目(即 Spring)中复制 Maven 依赖项吗?

转载 作者:行者123 更新时间:2023-11-30 10:31:31 25 4
gpt4 key购买 nike

这是简单的情况分解,我想知道我是否以最佳方式执行此操作,或者是否有更好的约定。为了学习目的,我创建了一个虚拟项目。

我创建了一个多模块 Maven 项目。简单的父 POM,有两个兄弟子 POMS,一个是服务层,另一个是 Web 层。

最终目标是在 Web 项目的目标文件夹中有一个功能齐全的 WAR,我可以简单地将它部署到 Tomcat 中。

这里是我不清楚的地方:- 服务项目和Web项目都需要使用Spring。服务项目需要使用 Spring 只是为了它的依赖注入(inject)目的。我需要一个简单的 Dog 类,并将其自动注入(inject)到 DogService 对象中。这一切都很好。- 然后我需要将 DogService 对象自动注入(inject) Dog Controller 。 Dog Controller 以多模块结构存在于 Web 项目中。这也工作正常,因为我已经在服务项目的 Web 项目中声明了依赖项,因此所有服务 JAR 都包含在来自 Web 项目的最终构建的 WAR 中。

1) 有没有一种方法可以简单地为两个子项目声明 Spring 依赖关系,而不必在每个子 POM.xml 中声明依赖关系?我只是想确保我没有重复资源。我相信这样做的方法只是在 Parent POM.xml 中声明依赖关系。

2) 如果我执行上面的#1 ^,这是创建项目的最佳方式吗?从本质上讲,WEB 模块是包含所有最终 jar 的模块,从本质上讲,它几乎就像 Tomcat 中甚至不存在 SERVICE 项目一样。就Tomcat“知道”而言,就是一堆包含类的JAR文件,其中一些已经写在我的WEB模块中,一些已经写在SERVICE模块中,所有这些都与生产/Tomcat 环境。是真是假?

谢谢!

最佳答案

Is there a way to simply declare a Spring dependency for both child projects without having to declare the dependencies in each child POM.xml? I just want to make sure I'm not duplicating resources. I believe the way to do this is just to declare the dependency in the Parent POM.xml.

Maven 在依赖管理方面非常智能,不会“复制”资源——它缓存每个依赖一次*并管理类路径,以便您使用的所有项目共享相同的 jar。通常,在需要的模块中声明依赖项;不要为了避免偶尔重新指定依赖项而将模块或尤其是父级与随机片段混在一起。这就像在日常通勤中拖着船拖车,因为您偶尔会去湖边。

请记住,依赖项是可传递的,因此如果 service-module 依赖于 spring-web(是真的,还是你垃圾邮件依赖项?),如果 web-module 依赖于 service-module 它也会引入依赖项而不必重复自己。

If I do #1 above ^, is this the optimal way of creating the project?

不,不是。对您的依赖项保持最低限度:如果您需要它,请包含它,但不要“防御性”地添加依赖项。这只会使您的部署膨胀并减慢构建速度,并增加出现版本不匹配等问题的机会。

As far as Tomcat 'knows', all there is, is a bunch of JAR files containing classes, some of them having been written in my WEB module, and some of them having been written in the SERVICE module, all of which is irrelevant to the production/Tomcat environment. True or false?

大部分是假的。在 war 中,您的顶级项目 (web-module) 的类直接在存档中,依赖项作为 jar 文件嵌入其中。但是,Tomcat 区分service-module 和您的 Spring 及其他依赖项。

最好还是使用 Spring Boot 的独立 jar 和嵌入式容器功能——Boot 会负责将您需要的 jar 打包到一个不需要外部支持的可运行文件中。

*仅发布依赖项,但快照与此处无关。

关于java - 这是在多模块项目(即 Spring)中复制 Maven 依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com