maven,一款项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。(百度百科)
Maven 概念模型图如下:此图我们可以知道maven的优点: ①管理依赖 ②一键构建
从上面的图片可知,maven有两大用处
① 依赖管理 传统工程,jar包是放置在项目当中 maven 工程真正的jar包放置在仓库当中,项目只用放置jar包的坐标 ② 一键构建 maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作我们知道一个java项目需要引入许许多多的jar包,假如一个项目就需要100个jar包,这些jar包不仅需要我们手动的去管理,会不会很烦,那么100个项目需要一万个jar包,我的天哪,这些项目的的jar包还是重复的,太繁琐,太占用内存了吧?maven就可以解决这个问题,maven建立了一个中央仓库,每一项目只需要导入需要jar的地址,根据地址去仓库中取复用就可以了,maven在封装复用上面是不是做的很完美。这样maven就成功做到了java项目的依赖管理。
程序员只要编写java程序,就会存在bug,有bug就需要测试,有了maven以后它可以自动化进行单元测试,直接找到有bug的程序代码。
maven可以进行一键构建,就是从项目的编译、测试、运行、打包、安装、部署都通过maven进行管理。这样是整个项目的工程变得更加方便,易维护管理。
①下载网址:maven下载
②解压:解压路径一定是英文,且没有空格,解压目录如下:
③ 环境变量配置:注意,前提必须进行了java环境变量的配置
三类仓库:
启动一个maven工程的时候,maven工程会通过pom文件中的jar包坐标去本地仓库找对应的jar包
①本地仓库:存放的是项目使用的jar包和插件。默认位置如下,可以修改路径,后面有介绍
②私服仓库:本地仓库jar包不全,且此时没有连接外网,就需要去私服仓库找相应的jar包。如果私服没有,且还不让连接外网,就想要从本地上传。
③中央仓库:默认情况下去本地找jar包,本地没有就去中央仓库,中央仓库是服务于整个互联网的,jar包相当全。
优化:修改本地仓库位置, 每次都需要访问中央仓库,可以下载所有的jar包到本地仓库,配置本地仓库的路径。
图解如下:
maven常用的构件命令
maven常用命令: 清理声明周期 clean 默认生命周期 compile test package install deploy 站点生命周期①:File→Settings
②:配置maven
③:配置不在联网情况下也可以创建maven项目
① File→New→Project→Maven
② 填写maven信息
③ 一直Next就可以了
效果如下:
④ main目录下创建resource的资源文件 ,并右击resource文件,→mark Dirctory as → Resources Root,作为资源根目录文件
① File→New→Project→Maven
② 一直next就行了
③ main目录下创建java的资源文件 ,并右击java文件,→mark Dirctory as → Sources Root,作为资源根目录文件
④ main目录下创建resources文件 ,并右击resources文件,→mark Dirctory as → Resources Root,作为资源根目录文件
⑤ src目录下创建test文件 , test目录下创建java的资源文件 ,并右击java文件,→mark Dirctory as → Sources Root
修改导包配置,在更改pom.xml文件的时候可以自动导包
我们先了解一下什么是jar包冲突。
在pom配置文件中,我们导入Spring框架的两个jar包
<dependencies> <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>我们只是导入了Spring-beans和Spring-context两个jar包,然后确出现了其他的jar包
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。
我们还发现我们先声明的spring-context 5.0.2版本的jar包,其Spring-corejar包的版本也是5.0.2,可以发现先声明的jar包坐标下的依赖包,可以优先进入项目中。
点击如图所示的,我们可以查看两种jar包的依赖关系:红色部分代表冲突,我们发现Spring-beans和Spring-context两个jar包都实现了Spring—core接口,但是Spring-beans和Spring-context两个jar包的版本不同,导致Spring-core的版本不同,此时就会发生spring-corejar包的冲突。
那么如何解决jar包冲突问题呢
方式一: 第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。 方式二: 路径近者优先原则。直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。 也就是我们把传递依赖的包,变成直接依赖的包,重写在配置文件中写一个自己想要的版本的依赖包 方式三[推荐使用] :直接排除法。 当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号。 因为此时依赖包使用的版本和默认和本jar包一样。 第三种方式如下所示:
待续!
冯佳兴 认证博客专家 Redis ELk 消息队列 一名非常热爱计算机的 Boy,技术是一门哲学,愿意和我一起研究新的技术吗?本人坚持自主学习,站在巨人肩膀上学习,善于分享。我会经常分享系列基础博客,希望大家喜欢,有什么问题记得关注留言哦!