文章目录

==自动化构建工具Maven==

==构建==:

以我们编写的Java代码、框架配置文件、国际化等其他资源文件、JSP页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。

  • 编译:Java源文件[User.java]—>Class字节码文件[User.class]—>交给JVM去执行。
  • 部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程”编译的结果“,编译结果==拿==到服务器上的指定目录下叫部署。
  • 搭建

构建过程中的各个环节

  • 清理:将以前编译得到的旧的Class字节码文件删除,为下一次编译做准备
  • 编译:将Java源程序编程成Class字节码文件
  • 测试:自动测试,自动调用junit程序
  • 报告:测试程序执行的结果
  • 打包:动态Web工程打war包,Java工程打jar包
  • 安装:Maven特定的概念——将打包得到的文件复制到”仓库“
  • 部署:将动态web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行

安装Maven核心程序

百度网盘:(链接:https://pan.baidu.com/s/18dN676Wj9ri0a-kDfb_cEQ 提取码:w2xg 复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享)

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.8.0_91

==Maven的核心概念==

  • 约定的目录结构
  • POM
  • 坐标
  • ==依赖==
  • 仓库
  • 生命周期/插件/目标
  • 继承
  • 聚合

第一个Maven工程

  1. 创建约定的目录结构(==自定义需配置 ||约定>配置>编码||==)

    1. 根目录:工程名
    2. src目录:源码
    3. pom.xml文件:Maven工程的核心配置文件
    4. main目录:存放主程序
    5. test目录:存放测试程序
    6. java目录:存放Java源文件
    7. resources目录:存放框架或其他工具的配置文件
  2. 常用Maven命令

    1. mvn clean:清理
    2. mvn compile:编译主程序
    3. mvn test-compile:编译测试程序
    4. mvn test:执行测试
    5. mvn package:打包
  3. POM(Project Object Model:项目对象模型||DOM(Document Object Model:文档对象模型))

    1. 相当于动态Web工程中的web.xml;
  4. 坐标

    1. 使用下面三个向量在仓库中唯一定位一个Maven工程

      1. groupid:公司或组织域名倒叙+项目名

        <groupId>com.lql.Hello</groupId>
        
      2. artifactid:模块名

        <artifactId></artifactId>
        
      3. version:版本

        <version></version>
        
  5. 仓库

    1. 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务。
    2. 远程仓库
      1. 私服:搭建在局域网环境中,为局域网范围内的所有工程服务。
      2. 中央仓库:架设在Internet上,为全世界所有Maven工程服务。
      3. 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度。
  6. 依赖(初步)

    1. Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。

      对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。

    2. 依赖的范围

      image-20201112085850268

      1. compile范围依赖

        • 对主程序是否有效:有效
        • 对测试程序是否有效:有效
        • 是否参与打包:参与
        • 是否参与部署:参与
        • 典型例子:spring-core
      2. test范围依赖

        • 对主程序是否有效:无效
        • 对测试程序是否有效:有效
        • 是否参与打包:不参与
        • 是否参与部署:不参与
        • 典型例子:junit
      3. provided范围依赖

        • 对主程序是否有效:有效
        • 对测试程序是否有效:有效
        • 是否参与打包:不参与
        • 是否参与部署:不参与
        • 典型例子:servelet-api.jar

        image-20201112100219406

        image-20201112100252282

  7. 生命周期

    顺序执行,自动执行命令之前的命令,Default生命周期最重要

  8. 在Eclipse中使用Maven

    • Maven插件:Eclipse内置
    • Maven插件的设置
      • Installations:指定Maven核心程序的位置,最好改成自己下的。
      • User Settings:指定conf/settings.xml的位置,进而获取本地仓库的位置。(百度Maven在eclipse中的配置就行)
    • 基本操作
      • 创建Maven版的Java工程(==注意==勾选第一个:Create a simple project)
      • 创建Maven版的Web工程(步骤较多,自行搜索)
      • 执行Maven命令
  9. 依赖(高级)

    • 依赖的传递性

      image-20201113100825481

      • 好处:可以传递的依赖在“最下面”的工程中依赖一次即可。
      • ==注意==:非compile范围的依赖不能传递。所以在各个工程模块有需要就得重复声明依赖。
    • 依赖的排除

      • 需要设置依赖排除的场合

        image-20201113101555487

      • 依赖排除的设置方式

        <exclusions>
             <exclusion>
                 <groupId>commons-logging</groupId>
                 <artifactId>commons-logging</artifactId>
             </exclusion>
        </exclusions>
        
    • 依赖的原则

      • 作用:解决模块工程之间的jar包冲突问题

      • 情景设定1:验证路径最短者优先原则

        image-20201113105330959

      • 情景设定2:验证路径相同时先声明者优先(dependency标签的声明顺序)

        image-20201113105355898

    • 统一管理依赖的版本

      • 情景举例:很多jar包的依赖版本一致,如果要统一升级,手动逐一修改不可靠。

      • 建议配置方式

        • 使用properties标签内使用自定义表签统一声明版本号

          <properties>
             <lql.spring.version>4.1.1.RELEASE</lql.spring.version>
          </properties>
          
        • 在需要统一版本的位置,使用${自定义标签}引用声明的版本号

          <version>${lql.spring.version}</version>
          
        • 其实properties标签配合自定义标签声明数据的配置不只是用于版本号,==凡是==需要统一声明后再引用的场合都可以使用。

          <properties>
            <lql.spring.version>4.1.1.RELEASE</lql.spring.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          </properties>
          
  10. 继承

    • 现状

      Hello依赖的junit:4.0

      HelloFriend依赖的junit:4.0

      Make Friends依赖的junit:4.9

      由于test范围的依赖不能传递,所以必然会分散再各个模块工程中,很容易造成版本不一致。

    • 需求:统一管理各个模块工程中对junit依赖的版本

    • 解决思路:将junit依赖统一提取到“父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。

    • 操作步骤

      • 创建一个Maven工程作为父工程,==注意==:打包的方式pom

        <groupId>com.lql.maven</groupId>
          <artifactId>Parent</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <packaging>pom</packaging>
        
      • 在子工程中声明对父工程的引用

        <!-- 子工程中声明父工程 -->
          <parent>
            <groupId>com.lql.maven</groupId>
          <artifactId>Parent</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
          <relativePath>../Parent/pom.xml</relativePath>
                  
          </parent>
        
      • 将子工程的坐标中与父工程坐标中重复的内容删除

        image-20201113141201946

      • 在父工程中统一junit的依赖

        <!-- 配置依赖的管理 -->
          <dependencyManagement>
            <dependencies>
                <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.0</version>
                <scope>test</scope>
            </dependency>
            </dependencies>
          </dependencyManagement>
        
      • 在子工程中删除junit依赖的版本号部分

        image-20201113142038202

      • ==注意==:配置继承后,执行安装命令时要先安装父工程。

  11. 聚合

    • 作用:一键安装各个模块工程

    • 配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块

      <!-- 配置聚合 -->
        <modules>
            <module>../Hello</module>
            <module>../HelloFriend</module>
            <module>../MakeFriends</module>
        </modules>
      
    • 使用方式:在聚合工程的pom.xml上点右键——》run as——》maven install

Maven酷站(查jar包依赖)