问题

    1. 项目重点jar包必须手动复制、粘贴到WEBINF/lib中
      1. 浪费存储空间。借助maven,可以将jar包保存在仓库中,有需要的使用的工程,引用这个文件接口
    2. jar包有依赖的jar包
      1. maven可以包含依赖
    3. jar包需要手动下载
      1. maven可以以一种规范下载jar包

    what’s maven
    maven是一款服务于Java平台的自动化构建工具。
    构建:以java源文件、框架配置文件、jsp、html、图片等资源为原材料,去生产一个可运行的项目的过程。
    编译->部署->搭建

    构建过程中的各个环节

    1. 清理:将以前比阿姨得到的旧的class字节码文件删除,为下一次编译做准备
    2. 编译:将java源代码编译成class字节码文件
    3. 测试:自动测试,自动调用junit程序
    4. 报告:测试程序执行的结果
    5. 打包:动态web工程打war包,java工程打jar包
    6. 安装:将打包得到的文件复制到仓库中的制定位置
    7. 部署:将动态web工程生成的war包覆知道servlet容器制定目录下,使其可运行

    安装maven

    1. 安装Java,配置环境变量
    2. 安装maven,配置环境变量,验证 mvn -v

    maven核心概念

    1. 约定的目录结构

    为什么要遵守目录结构:maven自动编译需要知道不同种类的文件在哪里

    1. pom
    2. 坐标
    3. 依赖
    4. 仓库
    5. 生命周期/插件/目标
    6. 继承
    7. 聚合

    常用的maven命令

    1. mvn clean :清理
    2. mvn compile : 编译主程序
    3. mvn test-compile:编译测试程序
    4. mvn test:执行测试
    5. mvn package:打包
    6. mvn install:安装
    7. mvn site:生成站点

    1.2 依赖范围

    1. compile
    2. test
    3. provided
    compile test provided
    对主程序是否有效
    对测试程序是否有效
    是否参与打包

    1.3 生命周期

    1. 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
    2. maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
    3. 为了更好的实现自动化构建,无论执行生命周期的哪个阶段,构建都会从生命周期的第一个阶段开始执行。

    clean生命周期:pre-clean -> clean -> post-clean
    site生命周期:per-site -> site -> post-site -> site-deploy
    default生命周期:
    validate
    generate-source
    process-source
    generate-resource
    process-resources
    compile
    process-class
    generate-test-sources
    process-test-sources
    test-compile
    process-test-classes
    test
    prepare-package
    package 接收编译好的代码,打包成可发布的格式,如jar
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install 将包安装至本地仓库,以让其他项目依赖
    deploy 将最终的包复制

    1.4 在eclipse中使用maven
    1.5 依赖【高级】

    1. 依赖的传递性

    【好处】可传递的的依赖不必在每个模块工程中重复声明,在“最下面”的模块中声明一下即可。
    【注意】非compile范围的依赖不能传递,所以在各个工程模块中,如果有需要就要重复声明依赖。

    1. 依赖的排除
    1. <exclusions>
    2. <exclusion>
    3. <groupId>1111</groupId>
    4. <artifactId>2222</artifactId>
    5. </exclusion>
    6. </exclusions>
    1. 依赖的原则
      1. 路径就近原则
      2. 路径长度相同时,先声明者优先
    2. 统一管理依赖的版本

    spring各个jar包依赖的版本都是4.0.0,如果需要统一升级为4.1.1,怎么办
    自定义统一声明版本号,作为变量,其他标签引用此变量
    1.6 继承
    ①现状
    hello依赖的Junit:4.0
    helloFriend依赖的Junit:4.0
    makeFriend依赖的Junit:4.9
    由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
    ②需求:统一管理各个模块工程中对Junit依赖的版本
    ③解决思路:将Junit依赖统一提取到父工程中,在子工程中声明Junit依赖时不指定版本,以父工程统一设定为准,同时也便于修改。
    注意打包方式为pom
    注意执行安装时,要先安装父工程make install
    1.7 聚合
    作用:一键安装各个模块工程
    配置方式:在一个总的聚合工程中,

    <!-- 配置聚合 -->
    <modules>
      <!-- 指定各个子工程的相对路径  -->
      <module>../Hello</module>
      <module>../HelloFriend</module>
      <module>../MakeFriends</module>
    </modules>
    

    使用方式:
    在聚合工程,pom.xml 右键—> run as —> 安装make install