Maven学习笔记

maven相信大家或多或少都有点知道,但是这玩意到底是干嘛的,需要怎么使用呢,近期一直在看视频以及一些书籍,在这里做个记录,有需要的同学可以共勉

一、作用:
    1、管理jar包
        a、会帮你自动添加需要的jar包。
        b、jar包之间的依赖关系,如果添加的jar包依赖其他jar包的话,你不用声明,它会自动帮你引入,并且不会冲突。
        
    2、将项目拆封成若干模块
        a、可以将项目分成多个模块进行开发,然后整合起来,组装成一个大项目。

二、概念
    是一个基于java的平台的 自动化构建工具(所以必须要有JDK)
    maven 自动化构建的主要工能:
    清理:删除编辑的结果,为重新编辑做准备。
    编辑:java -> class
    测试:单元测试 用测试代码来测试开发代码,针对于 项目中的关键点进行测试。
    报告: 测试结果 显示
    打包:将项目中包含的多个文件 压缩成一个文件 用于安装或者部署(java->jar  web->war)
    安装:将打成的包 放到 本地仓库,供其他项目使用(例如当前项目有三个模块,模块2需要模块2的支持,所以需要先将模块1放入到本地仓库中)。
    部署:将打成的包 放到 服务器上准备运行。
    
    注:下载一个jar包,先到本地仓库下载,如果不存在,就联网到中央仓库下载。


三、使用
    1、下载配置maven   地址:maven.apache.org
    2、检查配置JDK环境变量(这里不讲)
    3、配置maven环境变量  MAVEN_HOME=解压的文件路径  path=%MAVEN_HOME%\bin
    4、验证是不是配置成功: cmd->mvn -v
    5、配置本地仓库:在conf->setting.xml中,配置自己的本地仓库,<localRepository>D:/mvnrep</localRepository>
        默认本地仓库地址:${user.home}/.m2/repository
    
    
    maven约定的目录机构
            项目
            -src
                --main                程序功能代码
                    --java            java代码
                    --resources        资源代码
                --test
                    --java
                    --resources
            -target                 源码编译后的结果放到这里
            -pom.xml中                项目对象模型(project object model)
    
    
    pom.xml的文件内容结构
        <project>     
            <modelVersion>        工具eclipse生成以后自带标签,不用管
            
            下面这三个简称 GAV 理解为 坐标 ,根据这三个值可以准确定位到这个 项目
            <groupid>            类似于包名 例:com.baidu.maven   域名翻转.大项目名称
            <artifactId>          子模块(子项目名称)
            <version>            当前模块的版本号
            
            <name>                项目名称 一般来讲,name名和artifactId一致
            
            依赖:比如A中的某些类需要使用B中的某些类,称之为A依赖B,在maven项目中,如果要使用一个当时不存在的jar或者模块,则通过依赖实现
            <dependencies>
                 在https://mvnrepository.com/   中可以找到各个jar包的gav,直接复制过来就好
                 <dependency>
                      <groupId>junit</groupId>
                      <artifactId>junit</artifactId>
                      <version>4.0</version>
                      <scope>test</scope>

 

四、常用命令
    注:执行maven 必须在pom.xml所在目录中执行。
    
    第一次执行时,会从本地仓库或者中央仓库中 下载一些 该命令的基础环境,jar包
    mvn compile        --只编译main目录里面的文件
    mvn test        测试 
    mvn package        打成jar/war
    mvn install     将项目放到本地仓库中 ,供其他项目(模块)使用,(放入的位置通过gav决定)
    mvn clean        删除target目录,删除 编译文件的目录

五、依赖
    <scope>范围:
        1、compile(默认):  编译、测试、运行都能拿取到 仓库中的jar包
        2、test:     编译、运行都拿取不到jar ,只有测试能拿取到jar包,经典实例:junit,只有在测试时用到。
        3、provided:编译、测试能拿取,运行时不能拿取,经典实例:servlet-api.jar, 
    
    依赖排除:
    例子
    A.jar需要B.jar
        当我们通过maven引入A.jar的时候,会自动引入B.jar    
        A.jar(x.java,y.java,z.java)   B.jar(p.java,c.java,i.java)
            A.jar和B.jar之间的依赖本质:z.java -> c.java
            如果我只是 使用了A.jar中的x.java,所以我并不需要B.jar,但是maven自动帮我们引入了,所以这里我们就要依赖排除
            
    使用:
        <exclusions>
            <exclusion>
                这里就是不需要引入的jar包的GA
                <groupId>XXX</groupId>
                <artifactId>XXXX</artifactId>
            
    依赖传递性:
        A.jar -> B.jar —> C.jar
        要使 A.jar -> C.jar :当且仅当 B.jar 依赖于 C.jar 的范围是compile
    
    依赖原则:为了防止冲突
        1、路径最短优先原则
        2、路径长度相同:
            a、在同个pom.xml中,有两个相同的依赖,后面覆盖前面(一般严禁这种情况)。
            b、如果是不用的 pom.xml中有两个相同的依赖,则先声明的依赖 会覆盖后声明的依赖。
    
    项目之间的依赖:
    项目1需要项目2的资源,需要将项目1先install到本地仓库,然后在项目2的pom.xml中写入项目1的 gav
    
    
六、生命周期
    例如有 a b c d e 五个命令
    如果执行c命令,会将a b c全部执行一遍。
    包含三个阶段:
    1、clean lifecycle :清理
        pre-clean  clear   post-clean
    2、default lifecycle :默认
        install  package  compile...等等等等
    3、site lifecycle :站点
        pre-site   site  post-site  site-deploy 

七、统一版本
    
    在pom.xml中
        <properties>
            //名字随便取
            <lanqiao.World.junit.version>4.0</lanqiao.World.junit.version>
            
    然后下面的版本号,直接用这个变量 ${lanqiao.World.junit.version}

 

八、继承和聚合

    继承:
        如果A继承B,则 A可以使用B的所有依赖,与 依赖传递性 的区别是 不用管范围是不是compile都会 依赖
        例:
            1、建一个父工程(打包方式为pom),父工程依赖 需要这样写:
                    <DependencyManagement>
                        <dependencies>
                            <dependency>
            2、然后建一个子工程,然后在pom.xml中写:
                    <parent>
                        //如果发现父工程和当前的 版本或者包名都是一样的话,可以直接用父工程的
                        <groupId>
                        <artifactId>
                        <version>
                        //当前pom到父工程pom的相对路径
                        <relativePath>../B/pom.xml</relativePath>
            3、在子类中需要 声明 使用在父类中的多少 依赖
                    需要在子类的pom.xml中 加入父类对应依赖的 ga 不要 v,如下:
                    <dependencies>
                        <dependency>
                            <groupId>
                            <artifactId>
    
    聚合:
        maven项目能够识别的:自身包含的以及仓库中的资源。
        项目1引用项目2,需要先将项目2放入仓库,但是如果有需要项目需要引用的话,不用一个个将项目全部放入仓库,聚合能帮我完成。
        使用例子:
            在一个总工程(打包方式为pom的工程)中配置:
                pom.xml中
                <modules>
                    //这里的顺序没关系,会自动识别。
                    <module>../maven1  (这里写的是项目pom.xml文件的相对路径)
                    <module>../maven2
                    .
                    .
                    .
        
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值