Maven进阶学习
本文最后更新于:3 年前
Dubbo那个讲的有些拉跨,先往下走嗷!!!
- 主要解决的是多项目模块下,Maven如何通过父子工程的关系对于整个项目进行版本管理嗷!!
第一种方式:
场景描述:
- 多模块应用
- 可能使用到第三方的模块:Spring , MyBatis等
- Maven这个时候,非常适合管理嗷!!!(分布式就要实现这种模式)
- 大的项目需要一个老大来统一管理,统一版本号啊之类的。
创建父工程:
- 先创建一个父工程,不管quickstart也好,web也好,总之要一个Maven工程(实际上就是在新建空项目中新建一个Module为Maven项目)
- Maven父工程的要求:
- packing标签的文本内容必须设置为pom:
- packaging标签一般没有,没有的话默认为jar
- 但是现在你是父工程,你一定要设置为pom
- src要删除掉嗷!!!:
- src , target , pom
- target存打包后的文件的,可有可无,反正都要生成的。
- src必须要删除掉,这就是为啥webapp和java工程都无所谓的原因了嗷!!!
- packing标签的文本内容必须设置为pom:
- pom是项目对象模型,该文件是可以被集成的嗷!!!该文件可以被子模块儿来集成,本质上就是让子模块的pom文件来继承父工程的pom , 统一天下的pom!!!
创建子工程:
- 新建子工程必须也是Maven工程,quickstart , webapps都可以嗷!!!
- 选择的时候就要选择parent了嗷,记得改目录之类的嗷!!!
- 可以看看子模块中的pom文件这样就发生了改变嗷,由于其继承父模块,因此其这里的groupId和version都不用写嗷!!!
- Maven中的继承的含义和Java中差不多的嗷!!!
- 多个子Module去继承一个父亲Module就好了嗷!!!
- 继承可以反复继承,但是要注意,只要你要成为父工程,你一定要符合上面父工程的两点要求嗷!!!
- 一般应用的时候父工程子模块就行,主要统一标准两层就够用了,你搁那反复继承蹦迪没得意义嗷!!!
添加父亲:
创建工程的时候,哦豁,我忘了添加父子关系了orz
手动修改Pom文件嗷!!!
手动改配置关系,把配置文件改成继承的样子嗷!!!
这种方式的一些特性:
依赖冗余:
- 添加统一的依赖到父工程中,所有的子模块就都有对应的依赖了嗷!!!
- 父工程通过这种方式帮助我们统一管理了依赖。
- 父工程添加的依赖,所有的子模块会无条件的继承。
- 这个时候可能造成子工程中依赖冗余,因为无条件继承了啊orz。怎么解决?
- 父工程加强管理嗷!!!把所有的依赖放到dependencyManagement标签中,进行依赖管理。然后你发现和之前相比,子模块中的依赖都没有了???
- 子模块不能无条件继承这些模块儿啦!!!子模块从夫模块中各取所需。
- 声明式依赖,这个时候不用写version咯,父模块给你规定了version, 你只需要你要啥就可以辽!!!子模块依赖父模块的版本号,这意味着,只要你改了父模块依赖的版本号,子模块版本号就会自动跟着改变嗷!!!
- 当然,如果子模块指定依赖的版本号,那么就不会继承父工程的版本号嗷!!!
版本号管理:
- 本质上,父工程管理的是版本号嗷!!!
- 那就把版本号专门拿出来管理就好了嘛~
- 这里的标签是自定义的名称嗷,推荐使用项目名称-version这种形式来命名标签。也可以使用项目名称.version来命名嗷!!!当然也可以简化啊,你定义为mysql-version大家也都明白嗷!!!
- 这里定义完成之后,后面的dependencyManagement就可以修改其中的内容了嗷!!!
- 版本号分离了,这样更加方便管理嗷!!!
- SpringBoot也是用这种方式来管理的嗷!!!
第二种方式:
创建父工程
- 父工程的创建方式和前面是一样样的嗷!!!
- 父工程要遵循的规矩都是一样样的嗷!!!
创建子工程
- 子工程的创建:
- 这里是将子工程添加到父工程的里面了嗷!!!
- 然后兔兔子发现,我吐了这玩意儿我自己玩IDEA的时候遇见过,在新版的IDEA中没这个选项,第二种方式的这个操作是默认的orz。通过创建项目时候的通过文件所在目录来指定的,问题很大!!!如果你在新版的IDEA中不改,默认就是放在你的父Module的目录下面的嗷!!!
- 有一些小区别把,子模块的pom里面没有relative-path了。
- 父工程在新的IDEA版本中,总会有:
代表着它有哪些孩子工程嗷!!!
孩子要当爹了咋办?一样样的嗷,满足要求就可以有宝宝!!!
说白了第二种方式已经被新版的IDEA给取代了,确实没必要有这个选项嗷orz。
编译插件添加
- 建议还是添加以下编译的插件嗷,可能会出问题的地方我们尽量避免嗷!!!
你看看兔兔自己的默认的还是1.5呢orz
插件一样只在父工程里面添加就行了嗷:
- 添加完自动就变啦!!!
1 |
|
父工程不仅可以管理依赖,还可以管理插件嗷!!!
工作中这两种模式都有用到哦!!!第一种比第二种要多,第一种更加直观嗷。
第三种模式
- 一二种混杂使用,既有同级的,又有在包里的orz。
- 一般是你的大爷们(父工程)在第一层,你的孙子们(子工程)在父工程里面,这种嵌套方式嗷!!!
这种方式的一些特性:
- 参见上面嗷,一样样的,依赖管理啊,依赖声明啊,版本号管理啊,都和上面一样。
小tips:
由于这次示例的时候,我尝试的次数有点多,对于工程结构有了更加深的理解。
如果你要删某个模块儿:
- 先从项目工程中把它删了
- 再去文件夹下把它删了
- 再IDEA内点那个锤子重新构造工程
- 最后再将其重新创建即可
如果你要修改某个模块儿:
- 先把iml文件给他删了
- 先从项目工程中把它删了(有可能删了iml之后项目就自动删除了)
- 再IDEA内点那个锤子重新构造工程
- 最后再将其重新导入项目中即可
注意以下,这样可能可以解决项目名字后面有个括号的问题。
修改了依赖之后,记得刷新以下全部的pom嗷!!!
爷爷可以找到所有的子子孙孙嗷!!!
Maven进阶学习
https://alexanderliu-creator.github.io/2021/05/28/maven-jin-jie-xue-xi/