Maven理论以及在Idea中的操作

Maven 理论以及操作

现有技术总结

image

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

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

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

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

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

    • 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

  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=

    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 要负责项目的<font color = red>自动化构建</font>,以编译为例:Maven 要想自动进行编译,必须要知道 java 源文件存放在哪里。

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

      • 已配置的形式告诉框架

        <para-value>classpath:applicationContext.xml</para-value>

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

        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核心程序会首先到<font color=red>本地仓库</font>中查找

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

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

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

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

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

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

POM

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

坐标

  • 数学中的坐标

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

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

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

        <groupId>com.xxx.maven</groupId>

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

        <artifactId>Hello</artifactId>

      3. version:版本

        <version>0.0.1-SNAPASH0T</version>

      4. 如何进行定位:

        <dependency>
        
             <groupId>org.springframework<groupId>
        
             <artifactId>spring-core</artifactId>
        
             <version>4.0.0.RELEASE</version>>
        
             <scope>compile</scope>
        
        </dependency>
        

        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下添加如下配置

      <mirror>
      
      <id>alimaven</id>
      
      <name>aliyun maven</name>
      
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      
      <mirrorOf>central</mirrorOf>
      
      </mirror>
      
      <mirror>
      
      <id>alimaven</id>
      
      <mirrorOf>central</mirrorOf>
      
      <name>aliyun maven</name>
      
      <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
      
      </mirror>
      

生命周期

  • 各个构建环节执行的顺序,都是 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的坐标,每一个依赖都被<dependency></dependency>包含,放在<dependencies></dependencies>下面 1⃣️
    • 点击右边maven窗口的刷新按钮 2⃣️
    • 可以看到已经引入了junit的依赖 3⃣️
    image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容