maven复习 (进阶+高级)
maven初级
一.manve是什么?
Manve是一个项目管理工具, pom文件 通过添加和依赖管理系统, 可以通过一小段信息来管理项目的构建, 报告和文档的项目管理工具软件 . 包含了一个项目对象模型, 一组标准集合, 一个项目的生命周期, 一个依赖管理系统 ,和用来运行定义在生命周期阶段中插入 目标的逻辑
manve的作用 (能解决什么问题)
- 项目设置遵循统一的规则
- 任意工程中共享
- 依赖管理包括自动更新
- 一个庞大且不断增长的库
- 可扩展. 能够轻松编写Java或脚本语言插件
- 只需很少或不需要额外的配置即时访问新功能
- 构建工程 , 管理jar包
- jar包依赖 编译 测试 部署
maven的坐标
坐标:每一个 jar 包或 maven 项目在网络上都有一个独一无二的身份证
坐标(GAV)
- groupId 公司或组织域名的倒序(仓库:包名)
- artifactId 项目名或模块名(仓库:项目名)
- version 版本号(仓库:版本号)
<groupId>com.czxy</groupId> <artifactId>maven_test2</artifactId> <version>1.0-SNAPSHOT</version>
若安装到仓库,在仓库的位置为:仓库/com/czxy/maven_test2/1.0-SNAPSHOT
Maven常见的命令
clean:清空 target 目录
compile:生成 target 目录
package:在 target 目录生成 jar 包
install:将生成的 jar 包安装到本地仓库
Maven 高级
1.依赖冲突的解决方案
manve中的依赖关系:
直接依赖: A依赖B
间接依赖:A依赖B B依赖C ,A间接依赖C
问题:如果一个项目,同时依赖另外一个 jar 的不同版本,就可能导致 jar 冲突问题。这就是传递性依赖的
Jar 版本冲突问题。
测试代码
<!--导入相关依赖包--><dependencies><!--引入spring-context,它所以来的包都会导入进来--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version></dependency>
</dependencies>
当jar出现冲突时,有两种做法
1)maven根据上面的两个调解原则,自动处理
2)使用exclusions标签手动,排除不需要的jar
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.4.RELEASE</version><!--直接排除--><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency>
</dependencies>
dependencyManagement标签的作用是什么?
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
如下的配置是锁定了 spring-beans 和 spring-context 的版本:
<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.0.RELEASE</version></dependency></dependencies></dependencyManagement>
还可以把版本号提取出来,使用标签设置成变量。
如:
<!--版本号--><properties><spring.version>5.2.0.RELEASE</spring.version>
</properties><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency></dependencies></dependencyManagement>
继承和聚合
聚合
当有多个项目需要打包进仓库时(其实就是当前项目依赖很多项目,所以当前项目执行前,需要把这些依赖的项目全部install进本地仓库),一个一个执行install太麻烦,maven有一个方法可以多个项目一起install到本地仓库。就是聚合。
例如:
有A,B,C三个项目需要install,新建一个用来聚合的项目aggreation(要保证aggreation和那三个项目是同一个GroupID。这句话的意思是如果这多个项目不是同一个GroupID,就不能用聚合了?)。
然后修改aggreation项目的pom文件:
1. 打包方式由jar修改为pom:
pom
2. 添加 标签
<modules><module>../A</module><module>../B</module><module>../C</module> </modules>
这个 …/ 指什么?指maven的根目录?
应该是当前项目pom的上一级目录,其实就是所有项目存放的那个文件夹(也就是maven项目的根目录),然后就通过/A /B /C 代表当前项目和这三个项目的相对路径
然后对aggreation项目执行install命令,则项目A,B,C就都打包到本地仓库了。
执行aggreation项目如test,A,B,C项目也都会执行。即便ABC之间有依赖关系,如B依赖A,不用把A先执行安装,B同样会被执行。这是聚合的优势。
配置完聚合项目,只需要操作聚合项目,里面的项目都会被操作。不管这些项目之间是否有依赖。
继承:
为什么要使用继承:
pom.xml里面的配置,如果是多个项目,势必会出现依赖和插件的重复配置。在面向对象世界中,程序员可以使用类继承在一定程度上消除重复,在Maven的世界中,也有类似的
机制能让我们抽取出重复的配置,这就是pom的继承
maven复习 (进阶+高级)相关推荐
- 跟随大咖修炼运营圈求生欲:从案例中学习,进阶高级运营
作者:波波 运营小咖秀 运营圈的浮躁不可避免. 问题应运而生,解法却莫衷一是.内容.流量.转化--每一个概念都变得立体成为前行的庞大障碍.或许遇到知识短板,或许面对瓶颈无从下手--当你在浮躁中迷失,不 ...
- 复习JAVA高级部分
复习JAVA高级部分 线程池的创建及使用 Executors类提供了4种不同的线程池: newCachedThreadPool:用来创建一个可以无限扩大的线程池,适用于负载较轻的场景,执行短期异步任务 ...
- MyBatis进阶——高级使用1
第一节:输入参数和输出参数 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 1.1 环境准备 第一步:创建项目添加依赖 项 ...
- 摆脱运营打杂,进阶高级运营!运营小咖秀特训营第3期圆满落幕
作者:学运营就来 运营小咖秀 · 懂 · 运 · 营 · 更 · 懂 · 你 · 2019年4月20日-4月21日,由运营小咖秀主办的「摆脱运营打杂,进阶高级运营」线下特训营活动,在北京东城区青龙胡同 ...
- 如何才能进阶高级Java程序员?
身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识.进阶高级Java程序员要怎么做,不如跟着千锋重 ...
- python3进阶高级_python高级进阶
[直播预告]蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程 主讲人:萧恺(蚂蚁金服-支付宝事业群-高级开发工程师) 本名:肖汉松 讲师介绍:热爱阅读,喜欢挑战,热衷尝试新的技术,关注技术背后的 ...
- Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机
收集了2份文档资料:深入浅出springboot和深入Java虚拟机,希望能对想要进阶的小伙伴有所帮助 深入浅出springboot Spring Boot是一个微服务架构的框架,那么为什么要使用Sp ...
- 工业机器人电路图讲解话术_6张经典电路图分析助你进阶高级电工,你都会了吗?...
很多初学者朋友不知道怎么分析电路图,今天小编就挑选几个经典案列一一讲解,只要你彻底的学透了这几个电路,你就能慢慢学着自己设计电路了.高级电工考试会给出电路图,只要你会分析电路图,看图接线即可. 星三角 ...
- Java学习进阶—高级编程
当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...
最新文章
- 剑指offer:第一个只出现一次的字符
- 多行字符串,带有多余的空格(保留缩进)
- ARM Trustzone的安全扩展介绍-精简版-思维导图
- python Tkinter Text的简单用法
- POJ1265(Pick定理的应用)
- ng-repeat part1 - how UI is rendered from {{name}} to actual value
- 使用UGUI绘制自定义几何图形
- Linux进程列表巧用,Linux下的进程分析–PS
- 托管式服务网格:多种类型计算服务统一管理的基础设施
- 对正则表达式又重新学了一遍,笔记方便以后查阅
- 字节流转字符流OutputStreamWriter、InputStreamReader,关闭流的方法
- Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效
- 路由器长期通电好不好?
- 深度学习进阶NLP:word2vec的高速化
- (XWZ)的python学习笔记Ⅶ——正则表达式
- 软件测试面试题(面试前准备篇)
- 计算机机箱最新推出的是什么架构,独特三舱位结构:LIANLI 联力 推出 PC-O12 E-ATX 全塔机箱...
- 项目实战:动态系统的设计(类似朋友圈)
- python求圆的周长和面积
- docker 常用命令 -----(批量查看镜像/容器,重命名,运行,进入容器,私有仓库)