初识Maven

    xiaoxiao2022-07-07  217

     

    一、概念

       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包一样。 第三种方式如下所示:

     

    待续!

     

     

    冯佳兴 认证博客专家 Redis ELk 消息队列 一名非常热爱计算机的 Boy,技术是一门哲学,愿意和我一起研究新的技术吗?本人坚持自主学习,站在巨人肩膀上学习,善于分享。我会经常分享系列基础博客,希望大家喜欢,有什么问题记得关注留言哦!
    最新回复(0)