Maven基础学习笔记

下载链接

Maven简介

  • Maven是什么

    • Maven的本质是一个项目管理工具,将项目开发和管理的过程抽象成一个对象模型(POM)
    • POM(Project Object Model)项目对象模型

  • Maven有什么用

    • 项目构建:提供标准的、跨平台的、自动化项目构建方式
    • 依赖管理:方便快捷的依赖(jar包)管理,避免资源版本冲突的问题
    • 统一开发结构
      • src

        • main

          • java
          • resources
        • test
          • java
          • resources
      • pom.xml

Maven的基本概念

仓库

  • 仓库:用于存储资源,里面有各种各样的jar包
  • 仓库分类:
    • 本地仓库:自己电脑上的存储,一般是Maven自动从远程仓库是下载下来的
    • 远程仓库:非自己电脑上的仓库,为本地提供资源
      • 中央仓库:Maven官方的仓库
      • 私服:部门自己资源存储仓库,一般是Maven自动从远程仓库是下载下来的
  • 私服的作用
    • 保存具有版权的资源,包含购买和自主研发的jar

      • 中央仓库的jar都是开源的,不能有有版权jar
    • 一定范围内资源共享,仅对内部开放

坐标

  • 什么是坐标?

  • Maven坐标主要组成
    • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:orgmybatis)
    • artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
    • version:定义当前项目版本号
    • packaging:定义该项目的打包方式
  • Maven坐标的作用
    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
  • 坐标查询
    • <mvnrepository.com>

仓库的配置

  • Maven会默认把下载的资源保存在C盘,可以自定义

    • 配置文件位置:Maven的安装目录/conf/settings.xml
    • 50行左右:Default: ${user.home}/.m2/repository
    • <localRepository>D:\Software\ApplicationSoftware\mvnrepository\repository</localRepository>
  • 由于Maven的远程仓库在国外,下载速度慢,所以要改一下远程仓库的位置,这里可以使用阿里的镜像仓库

依赖管理

依赖配置

  • 在pom.xml中添加
<!-- 设置所有的依赖 -->
<dependencies>
<!-- 配置具体的某一个依赖 -->
<dependency>
<!-- 依赖所属的群组id -->
<groupId>org.springframework</groupId>
<!-- 依赖所属的项目id -->
<artifactId>spring-webmvc</artifactId>
<!-- 依赖所属的版本号 -->
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

依赖传递

  • 依赖具有传递性

    • 直接依赖:当前项目直接配置的依赖
    • 间接依赖:依赖的依赖
  • 依赖冲突问题
    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖

  • 指对外隐藏当前项目的依赖资源
  • 如果其它项目依赖了当前项目,那么它看不见当前项目的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 隐藏 -->
<optional>true</optional>
</dependency>

排除依赖

  • 主动断开依赖资源
  • 被排除的依赖不用指定version
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<!-- 断开 -->
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>

依赖范围

  • 依赖的jar在默认情况下为complie,可以在任何地方使用
  • 通过<scope></scope>标签设置依赖范围
  • 依赖范围
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)
scope 主代码 测试代码 打包 范例
compile(默认) Y Y Y log4j
test Y junit
provided Y Y servlet-api
runtime Y jdbc

依赖范围的传递性

  • 有依赖范围的资源在传递时,作用范围会受到影响

生命周期与插件

  • 一次构建过程经历了多少个事件

  • Maven对项目构建的生命周期划分为3套

    • clean:清理工作
    • default:核心工作,例如编译,测试,打包,部署等
    • site:产生报告,发布站点等

clean生命周期

  • pre-clean执行一些在clean之前的工作
  • clean移除上一次构建生成的文件
  • post-clean执行一些在clean之后的工作

default生命周期

  • 执行哪一项,那么生命周期为从第一个到当前项,从上到下

site构建生命周期

  • pre-site执行一些需要在生成站点文档之前完成的工作
  • site生成项目的站点文档
  • post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy将生成的站点文档部署到特定的服务器上

插件

  • 插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件功能
  • 默认Maven在各个生命周期上绑定有预设的功能
  • 通过插件可以自定义其它功能
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>

Maven基础学习笔记的更多相关文章

  1. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  2. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  3. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  4. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  5. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  6. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  7. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  8. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

  9. handlebars.js基础学习笔记

    最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...

随机推荐

  1. java 基础知识(三)

    Arraylist与Vector的区别 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料   162 人赞同了该文章 这几天工作有点忙,有很多代码需要写,更新文章有点慢,说声抱歉 ...

  2. JavaScript中call如何使用?

    一句话概括:call是函数才能调用的方法.作用是改变属性环境.有点绕,举个例子. 此处代码是在window环境下声明的变量和函数. var name='王延朋'; var age=18; var ex ...

  3. spring-boot-关于module自定义jar包打包无法给其他module使用

    ####世界大坑: 如果仅是使用 <build> <plugins> <plugin> <groupId>org.springframework.boo ...

  4. 线程的 sleep()方法和 yield()方法有什么区别?

    ① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会:yield()方法只会给相同优先级或更高优先级的线程以运行的机会: ② 线程执行 sleep()方法后 ...

  5. spark 写csv文件出现乱码 以及写文件读文件总结

    参考链接:https://blog.csdn.net/qq_56870570/article/details/118492373 result_with_newipad.write.mode(&quo ...

  6. Netty学习摘记 —— 再谈引导

    本文参考 本篇文章是对<Netty In Action>一书第八章"引导"的学习摘记,主要内容为引导客户端和服务端.从channel内引导客户端.添加ChannelHa ...

  7. leedcode_13 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 .12 ...

  8. JAVA中内存分配的问题

    JAVA中内存分配的问题 1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出 ...

  9. 两个echarts地图联动高亮区域

    项目要求左右两张地图能够在鼠标悬浮的时候高亮部分联动,曾尝试了connect不好使,所以自己写了这段代码.代码思路为: 鼠标移入地图时,另一侧的地图根据鼠标悬浮获取到的区域name使该区域高亮: 鼠标 ...

  10. 多页面共用sessionStorage的实现

    sessionStorage的局限:   sessionStorage是页面级别的,仅在一个标签页生效,如果同一个浏览器同时打开多个标签页,且都访问同一个域名,sessionStorage是不会在这多 ...