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. svn 清理报错

    Can't install '*' from pristine store, because no checksum is recorded for this file svn同步时,提示clean ...

  2. 一台 Linux 系统初始化环境后需要做一些什么安全工作?

    1.添加普通用户登陆,禁止 root 用户登陆,更改 SSH 端口号.        修改 SSH 端口不一定绝对哈.当然,如果要暴露在外网,建议改下.l    2.服务器使用密钥登陆,禁止密码登陆. ...

  3. SpringBoot与SpringCloud的关系与区别?

    一.SpringBoot和SpringCloud简介 1.SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动Sp ...

  4. C printf格式化输出

    转载:https://blog.csdn.net/wucz122140729/article/details/98434702 格式化输出       格式化输出的函数有printf.sprintf和 ...

  5. jvm-learning-类加载器分类

    public class ClassLoaderTest { public static void main(String[] args) { //获取系统类加载器 ClassLoader syste ...

  6. mysql问题排查与性能优化

     MySQL 问题排查都有哪些手段? 使用 show processlist 命令查看当前所有连接信息. 使用 explain 命令查询 SQL 语句执行计划. 开启慢查询日志,查看慢查询的 SQL. ...

  7. 说说 Redis 哈希槽的概念?

    Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点 ...

  8. Redis 的内存用完了会发生什么?

    如果达到设置的上限,Redis 的写命令会返回错误信息(但是读命令还可以正 常返回.)或者你可以将 Redis 当缓存来使用配置淘汰机制,当 Redis 达到内存 上限时会冲刷掉旧的内容.

  9. Linux分区问题

    一.基本分区的作用及其大小 /boot分区: 存放引导文件和Linux内核文件等. 引导文件:判断启动哪一个操作系统或启动哪个内核. 内核:管理硬件和软件资源,程序与硬件之间的桥梁. 分区大小:100 ...

  10. 学习SVN03

    SVN版本控制系统最佳实践   第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是 ...