Maven学习笔记

一、为什么使用maven

  1. 项目过大,不适合继续使用package来去划分模块,最好一个模块对应一个工程,借助Maven就可以将一个项目分成几个工程
  2. 同样的jar包文件重复出现在不同的项目工程中,浪费存储空间,工程臃肿,借助Maven,将jar包仅仅保存在“仓库”中有需要使用的工程“引用”这个文件的接口,并不需要吧jar包复制过来
  3. 借助Mavev可以以一种规范的方式下载jar包,所有的知名框架或第三方工具的jar包以及按照统一的规范存放在Maven的中央仓库中
  4. Maven会自动将被依赖的jar包导入进来

二、Maven是什么

1、Maven是一款服务于java平台的自动化构建工具

2、构建过程

(1)清理:将以前编译得到的就得class字节码文件删除,为下一次编译做准备

(2)编译:将java源程序编译成class字节码文件

(3)测试:自动测试,自动调用junit程序

(4)报告:测试程序执行的结果

(5)打包:动态web工程打war包,java工程打jar包,父工程打pom包

(6)安装:Maven特定的概念——将打包得到的文件复制到“仓库”中的指定位置

(7)部署:将动态web工程生成的war包复制到servlet容器的指定目录下,使其可以运行

3、安装Maven核心程序

(1)解压Maven的核心程序的压缩包,放在一个非中文无空格路径下

(2)配置Maven相关的环境变量

(3)验证:运行   mvn -v 命令查看Maven版本

三、Maven的核心概念

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

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:打包

(6)mvn install:安装

(7)mvn site:生成站点

 3、关于联网问题

(1)Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须有特定的插件来完成,而插件本身并不包含在Maven的核心程序中

(2)当我们执行的Maven名利需要用到某些插件时,Maven核心程序会首先到本地仓库中查找

(3)本地仓库的默认位置:【系统只给你当前用户的家目录】\.m2\repository

(4)Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。

(5)如果此时无法连接外网,则构建失败

(6)修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件

         在Maven的解压目录   conf\settings.xml

         <localRepository>D:\myManven</localRepository>

4、POM

(1)含义:Project Object Model项目对象模型

(2)pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置在这个文件中配置

5、坐标

maven使用三个向量在仓库中唯一定位一个Maven工程

(1)groupid:公司或者组织域名排序+项目名

         <groupid>com.xiong.maven</groupid>

(2)artifactid:模块名

<artifactid>hello</artifactid>

(3)version:版本

<version>1.0.0</version>

(4)Maven工程的坐标与仓库中路径的对应关系

6、仓库

(1)仓库库的分类

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

      远程仓库: 

                ①私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务

                ②中央仓库:架设在Internet上,为全世界所有的Maven工程服务

                ③中央仓库镜像:为了分担中央仓库的流量,提升用户的方位速度

(2)仓库中保存的内容:Maven工程

            ①Maven自身所需的插件

            ②第三方框架或工具的jar包

           ③我们自己开发的Maven工程

7、依赖

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

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

(2)compile范围依赖

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:参与
  • 是否参与部署:参与
  • 典型例子:spring-core

(3)test范围依赖

  • 对主程序是否有效:有、无效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与
  • 是否参与部署:不参与
  • 典型例子:junit

(4)provided范围依赖

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

8、Maven生命周期

(1)各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行

(2)Maven的核心程序中定义了抽象的生命周期,生命周期的各个阶段的具体人物是由插件来完成的

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

9、依赖(高级)

(1)依赖的传递性

          

好处:可以传递的依赖不必再每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可

注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果有需要需要重复声明依赖

(2)依赖的排除

(3)依赖的原则

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

②路径最短者优先原则

③路径相同时先声明者优先

(4)统一管理依赖的版本

  • 使用properties标签内使用自定义标签统一声明版本号
  • 需要统一版本的位置,使用${自定义标签名}引用声明的版本号

10、继承

①现状

  •  Hello依赖junit:4.0
  •  HelloFriend依赖junit:4.0
  •   MakeFriends依赖junit:4.9

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

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

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

④操作步骤

    【1】创建一个Maven工程为父工程。注意打包的方式pom

【2】在子工程中声明对父工程的引用

【3】将子工程的坐标中与父工程坐标中重复的内容删除

【4】在父工程中统一管理junit的依赖

【5】在子工程中删除junit依赖的版本号部分

注意:配置继承后,执行安装程序命令是要先安装父工程

11、聚合

(1)作用:一键安装各个模块工程

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

(3)使用法师:在聚合工程的pom.xml上点击右键—run as —maven install

12、在Eclipse中使用maven

(1)Maven插件:eclipse内置

(2)Maven插件设置

   installations :制定Maven核心程序的位置

  user settings:制定conf/setting.xml位置,进而获得本地仓库的位置

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值