一、概念
maven,一款项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。(百度百科)

Maven 概念模型图如下:此图我们可以知道maven的优点: ①管理依赖 ②一键构建

从上面的图片可知,maven有两大用处
① 依赖管理
传统工程,jar包是放置在项目当中
maven 工程真正的jar包放置在仓库当中,项目只用放置jar包的坐标
② 一键构建
maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作
二、Maven的优点
我们知道一个java项目需要引入许许多多的jar包,假如一个项目就需要100个jar包,这些jar包不仅需要我们手动的去管理,会不会很烦,那么100个项目需要一万个jar包,我的天哪,这些项目的的jar包还是重复的,太繁琐,太占用内存了吧?maven就可以解决这个问题,maven建立了一个中央仓库,每一项目只需要导入需要jar的地址,根据地址去仓库中取复用就可以了,maven在封装复用上面是不是做的很完美。这样maven就成功做到了java项目的依赖管理。
程序员只要编写java程序,就会存在bug,有bug就需要测试,有了maven以后它可以自动化进行单元测试,直接找到有bug的程序代码。
maven可以进行一键构建,就是从项目的编译、测试、运行、打包、安装、部署都通过maven进行管理。这样是整个项目的工程变得更加方便,易维护管理。

三、Maven的安装
①下载网址:maven下载

②解压:解压路径一定是英文,且没有空格,解压目录如下:

③ 环境变量配置:注意,前提必须进行了java环境变量的配置



四、Maven仓库种类及依赖关系
三类仓库:
启动一个maven工程的时候,maven工程会通过pom文件中的jar包坐标去本地仓库找对应的jar包
①本地仓库:存放的是项目使用的jar包和插件。默认位置如下,可以修改路径,后面有介绍

②私服仓库:本地仓库jar包不全,且此时没有连接外网,就需要去私服仓库找相应的jar包。如果私服没有,且还不让连接外网,就想要从本地上传。
③中央仓库:默认情况下去本地找jar包,本地没有就去中央仓库,中央仓库是服务于整个互联网的,jar包相当全。

优化:修改本地仓库位置, 每次都需要访问中央仓库,可以下载所有的jar包到本地仓库,配置本地仓库的路径。


五、 Maven的标准目录结构
src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
图解如下:


六、Maven的生命周期

maven常用的构件命令
maven常用命令:
清理声明周期
clean
默认生命周期
compile
test
package
install
deploy
站点生命周期
七、IDEA集成maven插件
①:File→Settings

②:配置maven

③:配置不在联网情况下也可以创建maven项目

八、IDEA 创建maven工程
一、使用骨架创建maven的java工程
① File→New→Project→Maven

② 填写maven信息

③ 一直Next就可以了

效果如下:

④ main目录下创建resource的资源文件 ,并右击resource文件,→mark Dirctory as → Resources Root,作为资源根目录文件

二、使用骨架创建maven的web工程
① 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

九、jar包冲突解决方案
修改导包配置,在更改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包一样。
第三种方式如下所示:

待续!
本文介绍了Maven项目管理工具,包括其概念、优点、安装方法,阐述了Maven仓库种类及依赖关系、标准目录结构和生命周期。还讲解了IDEA集成Maven插件及创建Maven工程的步骤,最后提及了jar包冲突问题及解决方案。
913

被折叠的 条评论
为什么被折叠?



