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. sqlserver下载地址及密匙

    SqlServer 2017 下载地址及密钥 下载地址: ed2k://|file|cn_sql_server_2017_developer_x64_dvd_11296175.iso|17697771 ...

  2. Intellij IDEA实现SpringBoot项目多端口启动的两种方法

    有时候使用springboot项目时遇到这样一种情况,用一个项目需要复制很多遍进行测试,除了端口号不同以外,没有任何不同.遇到这种情况怎么办呢?这时候可以使用Intellij IDEA解决 前言 有时 ...

  3. oracle.i18n.text.convert.CharacterConverterOGS.getInstance(I)Loracle/i18n/text/converter/CharacterConver;

    看看项目是不是同时包含ojdbc系列jar包和nls_charset12.jar包.如果同时包含,则删除nls_charset12.jar.因为低版本的nls_charset12和ojdbc包冲突.

  4. Java Output流写入包装问题

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); OutputStreamWriter output ...

  5. Java中自动装箱与拆箱

    一.什么是封装类? Java中存在基础数据类型,但是在某些情况下,我们要对基础数据类型进行对象的操作,例如,集合中只能存在对象,而不能存在基础数据类型,于是便出现了包装器类.包装器类型就是对基本数据类 ...

  6. 如何通过HibernateDaoSupport将Spring和Hibernate 结合起来?

    用 Spring 的 SessionFactory 调用 LocalSessionFactory.集成过程分三步: 配置 the Hibernate SessionFactory. 继承 Hibern ...

  7. synchronize、Lock、ReenTrantLock 的区别

    synchronize 和Lock: 1.synchronize 系java 内置关键字:而Lock 是一个类 2.synchronize 可以作用于变量.方法.代码块:而Lock 是显式地指定开始和 ...

  8. 学习GlusterFS(三)

    glusterfs,GNU cluster file system,创始人Anand Babu Periasamy,目标:代替开源Lustre和商业产品GPFS,glusterfs是什么: cloud ...

  9. MyBatis Plus 2.3 个人笔记-02-基本注解

    实体类注解 /* * MybatisPlus会默认使用实体类的类名到数据中找对应的表. * */ @TableName("tbl_employee") public class E ...

  10. Effective Java —— 优先考虑依赖注入来引用资源

    本文参考 本篇文章参考自<Effective Java>第三版第五条"Prefer dependency injection to hardwiring resources&qu ...