Maven理论以及在Idea中的操作

Maven 理论以及操作

现有技术总结

image

目前的技术在项目开发中遇到的问题

  1. 一个项目就是一个工程

    • 如果项目非常庞大,就不适合利用 package 来划分模块,期望每一个模块对应-一个工程, 然后每个工程之间还要相互调用. Maven可以满足我们的要求.
  2. 项目中需要的 jar 包是通过手动导入,“复制” “粘贴”到 WEB-INF/lib 目录下

    • 同样的 jar 包重复出现在不同的工程中.浪费存储空间.工程非常臃肿。
    • 使用 maven ,可以将 jar 包统一保存到仓库中,在工程中去引用”仓库”中的 jar 包即可,并不会把jar包复制到工程.
  3. 用到的jar包需要别人替我们准备好,或者可以到官网下载

    • 不同技术的官网提供 jar 包下载的方式是不同的
    • 有些技术的官网提供的下载方式就是 maven 的方式
    • 如果在不“正规”的网站以不“正规”的方式进行下载,可能得到不“正规的文件”
    • maven 可以以一种规范的方式下载 jar 包,目前几乎所有知名的以及非知名的框架或者第三方工具的jar包都按照统一的规范存在了 maven 的中央仓库
  4. 一个 jar 包依赖的其他的 jar 包需要一起导入到工程中,必须要求开发人员了解jar包之间的依赖关系,否则可能会发生冲突

    • FileUpload 组件依赖 IO 组件 Spring-Core 包依赖 IO 组件.
    • maven 可以帮我们解决jar包依赖的问题:自动的将所依赖的jar包引用进来

Maven是什么

  • Maven是一款服务于Java平台的自动化构建工具

  • 以 “java源文件” “框架的配置文件” “HTML/CSS/JS” "图片" “音视频” 等为“原材料”去生产一个可运行的项目的过程

  • 构建过程的各个环节

    1. 清理:将以前编译得到的旧的 class 字节码文件删除
    2. 编译:将 Java 源文件编译成 .class 文件
    3. 测试:自动测试,自动调用 Junit 程序
    4. 报告:测试程序执行的结果
    5. 打包: 动态WEB工程打 war 包. Java工程打 jar 包
    6. 安装: Maven的特定概念:将打包得到的文件复制到仓库中的指定位置 (就可以供别人使用)
    7. 部署: 将动态WEB工程生成的war包复制到服务器(tomcat)的指定目录下,使其可以运行

安装 Maven

  1. 检查 Java 环境
  • 在命令行中输入: java -verion
  1. 下载 maven

    • maven下载地址
  2. 将 Maven 解压到一个无中文无空格的路径下。(安装程序时,最好都无中文无空格)

    • 我的解压到了 /usr/local/ 目录下
    • tar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/
  3. 配置 maven 的环境变量

    • ~/.bash_profile (仅当前用户) 或者/etc/profile (全局) 中进行配置

    export M2_HOME=/usr/local/apache-maven-3.6.3
    export PATH=

    M2_HOME/bin

    
    * 保存退出以后记得 ```source ~/.bash_profile```   or   ```source  /etc/profile```
    
    
  4. 验证 Maven 是否安装成功

    • mvn -v

    • 安装成功后的截图

      image-20200930204114502

Maven 的核心概念

  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 仓库
  5. 依赖
  6. 生命周期 / 插件 / 目标
  7. 继承
  8. 聚合

Maven项目的目录结构

  1. 约定的目录结构

    根目录:工程名 testjava

    src目录:源码

    pom.xml : Maven 工程的核心配置文件

    main目录:存放主程序

    test目录: 存放测试程序,测试用例

    java目录:存放java源文件

    resources目录:存放框架或者其他工具的配置文件

    如图:

image
  1. 为什么要遵守约定的目录结构:

    • Maven 要负责项目的自动化构建,以编译为例:Maven 要想自动进行编译,必须要知道 java 源文件存放在哪里。

    • 如果我们想要定义一些配置想让框架或者其他工具知道

      • 已配置的形式告诉框架

        classpath:applicationContext.xml

      • 遵守框架或者工具内部已经存在的约定

        log4j.xml log4j.properties

        约定 > 配置 > 编码


常用的 Maven 命令

  • 常用命令

    mvn clean: 清理

    mvn compile:编译主程序

    mvn test-compile : 编译测试程序

    mvn test:执行测试

    mvn package:打包

    mvn install :安装

    mvn site :生成站点

    mvn deploy : 部署

  • 执行与构建过程相关的命令,必须进入pom.xml所在的目录下


联网问题

  • maven 的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成,而插件本身没有包含在maven的核心程序中。

  • 当我们执行 maven 命令需要用到相关的插件时,Maven核心程序会首先到本地仓库中查找

  • 如果 maven 在本地仓库中找不到要用的插件,就会到中央仓库中去找,需要连接外网

    ​ maven会把jar包下载到本地仓库中 /Users/username/.m2/repository

  • 如果无法连接外网,则构建失败

  • 可以将所要用到的插件或是其他的 maven 工程提前下载好,存放到本地仓库中即可。

  • 可以配置本地仓库的位置

    • 在 maven 解压目录中找到 conf/settings/xml
    • /Users/username/RepMaven

POM

  • 含义:Project Object Model 项目对象模型
  • pom.xml 是maven 工程的核心配置文件,与构建过程相关的一切设置都在这个文件中配置
  • 重要程度相当于 web.xml 对于动态 web 工程,applicationContext.xml 对于 spring 框架

坐标

  • 数学中的坐标

    • 在平面上:使用 x , y 两个向量可以唯一的定位平面中的任何一个点
    • 在空间上:使用 x , y , z 三个向量可以唯一的定位空间中任何一个点
  • maven 中的坐标

    • maven也是通过三个向量定位仓库中的一个 maven 工程

      1. groupId:公司或者组织的域名倒叙 + 项目名 (项目名可以随便取)

        com.xxx.maven

      2. artifactId:模块名 (一个项目可能有多个模块,即多个工程)

        Hello

      3. version:版本

        0.0.1-SNAPASH0T

      4. 如何进行定位:

        
        
             org.springframework
        
             spring-core
        
             4.0.0.RELEASE>
        
             compile
        
        
        

        eg : org/springframework/spring-core/4.0.0.RELEASE/sprin-core-4.0.0.RELEASE.jar (可以理解为路径)


仓库

  • 仓库的分类

    1. 本地仓库:在当前电脑上部署的仓库目录,为当前电脑上所有的 Maven 工程服务

    2. 远程仓库:

      • 私服(局域网仓库):搭建在局域网中,为局域网范围内的所有Maven工程服务
      • 中央仓库:假设在internet上,为全世界所有 Maven 工程服务
      • 中央仓库镜像: 为了分担中央仓库的流量,提升用户访问速度,在各个州假设的仓库
  • 仓库中保存的内容

    1. Maven 自身所需要的插件
    2. 第三方框架或者工具的 jar 包
    3. 我们自己开发的 Maven 工程(安装)
  • 解决下载仓库中的资源缓慢的问题

    • maven 默认的中央仓库架设在国外的服务器上,所以会导致下载缓慢的问题

    • 可以修改配置文件中的镜像,设置为阿里云的镜像

    • 修改 conf/settings.xml 文件,在mirros下添加如下配置

      
      
      alimaven
      
      aliyun maven
      
      http://maven.aliyun.com/nexus/content/groups/public/
      
      central
      
      
      
      
      
      alimaven
      
      central
      
      aliyun maven
      
      http://maven.aliyun.com/nexus/content/repositories/central/
      
      
      

生命周期

  • 各个构建环节执行的顺序,都是 Maven 预定设定好的,不能打乱该顺序,必须按照规定的正确的顺序来执行

  • Maven 的核心程序定义了抽象的生命周期,生命周期中各个阶段的具体任务由插件来完成

  • Maven 核心程序为了更好的实现自动化构建,按照这样的特定执行生命周期的各个阶段:不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行

  • 插件和目标

    • 生命周期的各个阶段仅仅定义了要执行的任务是什么
    • 各个阶段和插件的目标是对应的
    • 相似的目标由特定的插件来完成
    • 可以将目标看做是“调用插件的命令”

Maven在IDEA中的使用

  • 创建普通的项目或者模块,然后在创建的项目(模块)上面添加maven的支持

    1. 创建模块

[图片上传失败...(image-87ce09-1601609755495)]

image
image
  1. 添加 maven 的依赖
image
image
image
  • 修改idea中maven的配置

    Preferences -> Build,Execution,Deployment -> Build Tools -> maven

    修改 Maven home direcory , User settings file , Local repository

    image
  • 加入新的依赖,如junit

    • 首先在pom.xml文件中添加junit的坐标,每一个依赖都被包含,放在下面 1⃣️
    • 点击右边maven窗口的刷新按钮 2⃣️
    • 可以看到已经引入了junit的依赖 3⃣️
    image

你可能感兴趣的:(Maven理论以及在Idea中的操作)