相关文章推荐
跑龙套的毛豆  ·  springcloud ...·  1 年前    · 
酷酷的冲锋衣  ·  node.js - Are ...·  1 年前    · 
旅行中的烈马  ·  c# - How does ...·  1 年前    · 

练习继承时,一个同学今天问我:为什么在父类中写了Junit,子类中还要写呢?

首先明白  dependencies与 dependencyManagement的区别:

dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项,如果父类有很多依赖,这样没用的也继承来,会造成臃肿。

dependencyManagement里 只是声明依赖,并不实现引入 ,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父类pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
这样就应该明白了。

答案:在 Maven ,父 POM 文件通常用于管理子模块的公共 依赖 和版本。一旦在父 POM 定义了一个 依赖 ,所有的子模块都能够访问到这个 依赖 ,而不需要在每个子模块 单独 声明 。在父 POM 声明 依赖 ,子模块是可以直接使用的,不需要再次引入。如果需要在子模块 覆盖父 POM 的版本,可以在子模块的 POM 文件 声明 相同的 依赖 和新的版本号。标签 声明 了一个 依赖 ,那么在所有的子模块 ,只需要 声明 这个 依赖 的 groupId 和 artifactId,不需要再 版本号,因为版本号会自动 继承 自父 POM。 工程的拆分 工程的拆分可以实现分模块开发与测试,可实现多线程开发与管理,提高工程代码复用度的同时也提高软件的开发速度与效率。 一个完整的早期开发好的crm项目,现在要使用 maven 工程对它进行拆分,这时候就可以将dao拆解出来,形成独立的工程,同样service,action也都进行这样的拆分。 把工程拆分成独立的工程,将来要用到的时候就把它们的坐标给引进来就行了,这就有点类似于搭积木一样,其 dao,service,web.都是crm06的子模块。 从它的目录结构可以看出,父工程本身不 代码,它里面 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2020.0.2</version> 项目越来越趋向模块化开发,使用 maven 构建工程,必然涉及到父子pom的关联,父pom文件的父级又会 继承 springboot项目,就这样在开发 踩坑不少,简单记录一下。 看问题之前先了解 maven 的两个标签<dependencyManagement>和<dependencies>,明白的直接跳过。 maven 标签 1、<dependencyManagement> 这里其实是起到管理 依赖 jar版本号的作用,一般只会在项目的最顶层的pom.xml 使用到,所有子mod <groupId>com.thomas.yang</groupId> <artifactId>School</artifactId> <version>1.0-SNAPSHOT</version> (一)父子工程和聚合工程的区别 1)父子: 父类 工程,打包方式是 pom,目标只有一个,就是管理version版本号。可以利用 dependecemanagement 标签,管理一系列。可以有多个单体项目 继承 自这个 父类 。 2) 聚合:单个项目实在太大了,将其分成 几个小模块:页面web, 前端controller, 间service,后端 dao。这几个模块分别作为单个项目进行打包。 3)一般来说,不需要聚合工程,仅需要 父子工程,即可一键打包,统一管理版本号。 4)坑1: 父类 的optional标签.