Maven的学习
Maven 安装与配置
今天我们来学习一下Maven,Maven就相当于一个管理的工具,原理就是使用一个插件,这个插件由多个jar包构成。
在一个公司的项目开发过程中,一个大的项目通常被分为好几个小的模块,由不同的人去完成,但是不同的人在开发的过程中,使用的组件,jar包难免会有不同,所以在整合的时候会出现一些版本号不同所导致的一些错误。那么怎么避免这个错误呢?
这就要用到Maven了,Maven在其中的作用就相当于一个中央仓库,每一个开发的人都可以使用Maven中的一些jar包,也可以将自己所完成的jar导入Maven这个中央仓库,在项目开发中这些jar包通常由项目管理人员指定的,这样能最大程度的避免因为版本号不同所导致的错误。
一、获取Maven
1、下载Maven
- 可以直接在浏览器中前往apache的官网进行下载Maven – Welcome to Apache Maven。
- 也可以在国内各大镜像源网站上下载,这里我使用的是阿里云Index of apache-local/maven
2、解压Maven压缩包到本地目录
3、配置D:\soft\apache-maven-3.5.2-bin\apache-maven-3.5.2\conf\settings.xml文件
- 修改本地仓库地址
- 修改镜像源地址
4、配置环境变量
右击电脑属性,找到高级系统设置,在里面有一个环境变量
在系统环境变量里新建一个MAVEN_HOME,变量名设为解压后的Maven文件根目录
再在系统变量里找到Path变量,在里面加上%MAVEN_HOME%\bin
配置完成后可以打开cmd窗口输入mvn - v
查看版本号来验证是否安装成功
到此环境变量就配置好了,Maven也基本下载安装完毕。
二、认识Maven
我们安装完Maven之后可能在想,Maven是什么,有什么功能?
-
Maven翻译成中文就是大师、专家、内行的意思
-
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。
-
依赖管理:jar之间的依赖关系,jar包管理问题统称为依赖管理
-
项目构建:项目构建不等同于创建项目
项目构建分成7步,创建项目是一瞬间完成的
1、清理
2、编译
3、测试
4、报告
5、打包
6、安装
7、部署
三、Maven与Idea及相关应用
1、首先创建一个Maven项目文件
2、在settings里面搜索Maven,然后在Maven home path里面选择自己下载的版本,并选好settings file 和本地仓库
四、Maven核心
1、pom文件
pom.xml全称:Project Object Model【项目对象模型】,将项目封装为对象模型,便于使用Maven管理【构建】项目
pom.xml常用标签:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--设置工程坐标 -->
<parent>
<groupId>com.shujia</groupId>
<artifactId>Maven</artifactId>
<version>1.0</version>
</parent>
<artifactId>java</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、Maven约定的目录结构
项目名
src【书写java源代码】
main【书写java主程序代码】
java【书写java代码】
resources【书写配置文件代码】
test【书写测试代码】
java【书写测试java代码】
pom.xml【书写配置文件代码】
target【编译后目录结构
3、Maven的生命周期
Maven的生命周期分为3部分
- Clean 单独作为一个生命周期
- compile【编译】,test【测试】,package【打包】,install【安装】,deploy【部署】。是构建的核心部分
- validate,verify,site是第三部分生成项目报告,站点,发布站点。
生命周期不是一步直接执行的,是在三部分里依次执行,就比如我想要执行package,就必须先执行compile,test,再执行package结束,同理我想要执行,install,就必须先执行compile,test,package,再执行install结束
4、插件与目标
插件:插件的本质就是一些jar包和配置文件构成的
目标:每个插件都能实现多个功能,每个功能就是一个插件目标
5、Maven的仓库【重点】
Maven的仓库分为两种:本地仓库和远程仓库
本地仓库:在自己的计算机上的仓库,仅为当前计算机提供Maven服务
远程仓库:在服务器上的仓库,为其他计算机提供Maven服务
私人服务器:假设在当前局域网环境上的服务器,为当前局域网范围内的计算机
中央仓库:架设在公共Internet上,为全世界所有的Maven工程服务
中央仓库镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请 求。
仓库中的文件类型:jar包
jar包分为:Maven的插件,第三方框架或者工具的jar包,自己研发编写的项目或者模块
6、Maven的坐标【重点】
之前我们在Maven的常用标签里面看来pom文件的内容,其中就有工程坐标,现在我们来学习一下坐标
坐标的作用
使用坐标的目的就是引入jar包,让计算机可以找到jar包的位置,所以被称作坐标
坐标的构成
坐标的结构为g-a-v
[1]groupId:公司或组织的域名倒叙+当前项目的名称
[2]artifactId:当前模块的名字
[3]version:当前模块的版本
要注意的是:在g-a-v中是本地仓库jar包的位置 在a-v中是jar包的全名
坐标的引用
这里有一个很好的网站Maven Repository: Search/Browse/Explore,这个网站汇总了所有的引用jar包坐标,直接在网站上找到这个jar包直接粘贴复制
语法示例:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>com.shujia</groupId>
<artifactId>maven-demo1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
五、Maven的依赖管理
1、依赖语法:< scope >
compile【默认值】:在main、test、Tomcat【服务器】下均有效。
test:只能在test目录下有效
provided:在main、test下均有效,Tomcat【服务器】无效。
2、依赖传递性
注意:
先申明者优先
路径最短者优先
Maven可以解决jar包直接的依赖问题
六、Maven中统一管理版本号
1、语法
<properties>
<junit-version>4.12</junit-version>
</properties>
<dependencies>
<!--https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<!-- <scope>test</scope>-->
</dependency>
</dependencies>
七、Maven的继承
1、为什么需要继承
如子工程大部分都共同使用jar包,可以提取父工程中,使用
【继承原理】在子工程中使用
父工程打包方式,必须是pom方式
2、Maven继承方式一
在父工程中的pom.xml中导入jar包,在子工程中统一使用。
【所有子工程强制引入父工程jar包】
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3、Maven继承方式二
在父工程中导入jar包【pom.xml】
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
在子工程引入父工程的相关jar包
<parent>
<artifactId>maven_demo</artifactId>
<groupId>com.shujia</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
注意:在子工程中,不能指定版本号
八、Maven的聚合
1、为什么使用Maven的聚合
优势:只要将子工程聚合到父工程中,就可以实现效果:安装或清除父工程时,子工程会进行同步操作。
注意:Maven会按照依赖顺序自动安装子工程
2、语法
<modules>
<module>maven_helloworld</module>
<module>HelloFriend</module>
<module>MakeFriend</module>
</modules>