maven初级

一.manve是什么?

Manve是一个项目管理工具, pom文件 通过添加和依赖管理系统, 可以通过一小段信息来管理项目的构建, 报告和文档的项目管理工具软件 . 包含了一个项目对象模型, 一组标准集合, 一个项目的生命周期, 一个依赖管理系统 ,和用来运行定义在生命周期阶段中插入 目标的逻辑

manve的作用 (能解决什么问题)

  • 项目设置遵循统一的规则
  • 任意工程中共享
  • 依赖管理包括自动更新
  • 一个庞大且不断增长的库
  • 可扩展. 能够轻松编写Java或脚本语言插件
  • 只需很少或不需要额外的配置即时访问新功能
  • 构建工程 , 管理jar包
  • jar包依赖 编译 测试 部署

maven的坐标

坐标:每一个 jar 包或 maven 项目在网络上都有一个独一无二的身份证
坐标(GAV)

  1. groupId 公司或组织域名的倒序(仓库:包名)
  2. artifactId 项目名或模块名(仓库:项目名)
  3. 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复习 (进阶+高级)相关推荐

  1. 跟随大咖修炼运营圈求生欲:从案例中学习,进阶高级运营

    作者:波波 运营小咖秀 运营圈的浮躁不可避免. 问题应运而生,解法却莫衷一是.内容.流量.转化--每一个概念都变得立体成为前行的庞大障碍.或许遇到知识短板,或许面对瓶颈无从下手--当你在浮躁中迷失,不 ...

  2. 复习JAVA高级部分

    复习JAVA高级部分 线程池的创建及使用 Executors类提供了4种不同的线程池: newCachedThreadPool:用来创建一个可以无限扩大的线程池,适用于负载较轻的场景,执行短期异步任务 ...

  3. MyBatis进阶——高级使用1

    第一节:输入参数和输出参数 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 1.1 环境准备 第一步:创建项目添加依赖 项 ...

  4. 摆脱运营打杂,进阶高级运营!运营小咖秀特训营第3期圆满落幕

    作者:学运营就来 运营小咖秀 · 懂 · 运 · 营 · 更 · 懂 · 你 · 2019年4月20日-4月21日,由运营小咖秀主办的「摆脱运营打杂,进阶高级运营」线下特训营活动,在北京东城区青龙胡同 ...

  5. 如何才能进阶高级Java程序员?

    身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识.进阶高级Java程序员要怎么做,不如跟着千锋重 ...

  6. python3进阶高级_python高级进阶

    [直播预告]蚂蚁金服高级开发工程师萧恺:IDEA 插件开发入门教程 主讲人:萧恺(蚂蚁金服-支付宝事业群-高级开发工程师) 本名:肖汉松 讲师介绍:热爱阅读,喜欢挑战,热衷尝试新的技术,关注技术背后的 ...

  7. Java进阶高级程序员必备:深入浅出springboot+深入Java虚拟机

    收集了2份文档资料:深入浅出springboot和深入Java虚拟机,希望能对想要进阶的小伙伴有所帮助 深入浅出springboot Spring Boot是一个微服务架构的框架,那么为什么要使用Sp ...

  8. 工业机器人电路图讲解话术_6张经典电路图分析助你进阶高级电工,你都会了吗?...

    很多初学者朋友不知道怎么分析电路图,今天小编就挑选几个经典案列一一讲解,只要你彻底的学透了这几个电路,你就能慢慢学着自己设计电路了.高级电工考试会给出电路图,只要你会分析电路图,看图接线即可. 星三角 ...

  9. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

最新文章

  1. 剑指offer:第一个只出现一次的字符
  2. 多行字符串,带有多余的空格(保留缩进)
  3. ARM Trustzone的安全扩展介绍-精简版-思维导图
  4. python Tkinter Text的简单用法
  5. POJ1265(Pick定理的应用)
  6. ng-repeat part1 - how UI is rendered from {{name}} to actual value
  7. 使用UGUI绘制自定义几何图形
  8. Linux进程列表巧用,Linux下的进程分析–PS
  9. 托管式服务网格:多种类型计算服务统一管理的基础设施
  10. 对正则表达式又重新学了一遍,笔记方便以后查阅
  11. 字节流转字符流OutputStreamWriter、InputStreamReader,关闭流的方法
  12. Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效
  13. 路由器长期通电好不好?
  14. 深度学习进阶NLP:word2vec的高速化
  15. (XWZ)的python学习笔记Ⅶ——正则表达式
  16. 软件测试面试题(面试前准备篇)
  17. 计算机机箱最新推出的是什么架构,独特三舱位结构:LIANLI 联力 推出 PC-O12 E-ATX 全塔机箱...
  18. 项目实战:动态系统的设计(类似朋友圈)
  19. python求圆的周长和面积
  20. docker 常用命令 -----(批量查看镜像/容器,重命名,运行,进入容器,私有仓库)

热门文章

  1. android 开发相机焦距解析之调节远近焦距
  2. 简单的美团-web前端页面
  3. linux防火墙开放端口无法打开,LInux 开启防火墙网站无法访问问题
  4. 028 《数据分析师养成宝典》读书笔记
  5. 设计字体时字体性格的分类表现(二)
  6. 团队作业1 团队展示选题
  7. Ubuntu18.04局域网共享文件夹,实现win7和Ubuntu本地访问
  8. 写给女儿青春生日的信(转载)
  9. C++读取netcdf文件
  10. 活久见!程序员开发进度太慢被公司告上法庭,索赔 90 万!