Maven基础知识
Maven基础概念
仓库
- 仓库:用于存储资源,包含各种jar包
中间环节添加一个私服,用来避免多人同时调取同一个资源,国外仓库的传输速度过慢且二次传输的问题。通过私服局域网传输速度会加快很多。
-
仓库分类:
-
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
-
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
-
- 中央仓库:MAVEN团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
-
-
私服的作用:
-
保存具有版权的资源,包含购买或自主研发的jar
-
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
-
一定范围内共享资源,仅对内部开放,不对外共享
-
小节
- 仓库的概念与作用
- 仓库的分类
- 本地仓库
- 远程仓库
- 中央仓库
- 私服
坐标
-
什么是坐标?
Maven中的坐标用于描述仓库中资源的位置
https://repo1.maven.org/maven2/
-
Maven坐标主要组成
groupid:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version:定义当前项目版本号
packaging:定义该项目的打包方式
-
Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交友
小节
- 坐标的概念与作用
- 坐标的组成
- 组织ID
- 项目ID
- 版本号
仓库配置(settings.xml)
-
Maven启动后,会自动保存下载的资源到本地仓库
-
默认位置
Default: ${user.home}/.m2/repository
当前目录位置为登录用户名所在目录下的.m2文件夹中
-
自定义位置
E:\maven_cangku\repository
当前目录位置为D:\maven\repository文件夹中
-
远程仓库配置
-
Maven默认连接的仓库位置
-
-
镜像仓库配置
-
在setting文件中配置阿里云镜像仓库
-
-
具体配置如下图所示
全局Setting与用户setting区别
- 全局setting定义了当前计算器中Maven的公共配置
- 用户setting定义了当前用户的配置
小节
- 配置本地仓库(资源下到哪)
- 配置阿里镜像仓库(资源从哪来)
- setting文件的区别
第一个Maven项目(手工制作)
mvn archetype:generate -DgroupId=com.ahao -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
小节
- 插件创建Maven工程
- Maven web工程目录结构
第一个Maven项目(IDEA生成)
配置maven环境,支持3.6.1版本
点击
一路到底,就生成了,分别赋予不同的属性,并在test中添加resources
赋予test resources属性
然后可以点击下图所示的位置,可看到编译等方法。
在xml文件中,添加如下内容后需要在maven中点击刷新按钮
**另外一个方法:**点击编辑配置
小节
- Maven环境配置
- Maven项目创建
- Maven命令执行
另外一种方式生成:
点击对勾,并搜索quick,随后起名字,如com.ahao java01,然后一路next
之后按照同样的方式添加resources包。并赋予属性(不同的颜色包)。
tomcat插件安装与web工程启动
按照这个顺序弄好web项目
配置xml文件
在build中加入tomcat包,需要去maven仓库找
Maven Repository: org.apache.tomcat.maven » tomcat7-maven-plugin » 2.1 (mvnrepository.com)
复制到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>
<groupId>com.ahao</groupId>
<artifactId>web01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>web01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
</dependencies>
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</project>
另外一种方式就是在编辑配置中,添加maven,后输入tomcat7:run
所有的说明:配置
<?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">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--组织id-->
<groupId>com.ahao</groupId>
<!--项目id-->
<artifactId>web01</artifactId>
<!--版本号:release,shapshot-->
<version>1.0-SNAPSHOT</version>
<!--打包方式,web工程打包为war,jave工程打包为jar-->
<packaging>war</packaging>
<name>web01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--设置当前工程的所有依赖-->
<dependencies>
<!--具体的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<!--构建-->
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
</project>
依赖管理
依赖配置
- 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
- 格式:
依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
说白了就是,引用其他人使用的工程后,会继承他人所依赖的某些jar包。
依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
可选依赖指对外隐藏当前所依赖的资源–不透明,通过optional设置
排除依赖
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本–不需要
小节
- 依赖管理
- 依赖传递
- 可选依赖(不透明)
- 排除依赖(不需要)
依赖范围
- 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
- 作用范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
使用方法:
依赖范围传递性
- 带有依赖范围的资源在进行传递时,作用范围将受到影响
小节
- 依赖范围
- 依赖范围传递性(了解)
生命周期与插件
项目构建生命周期
- Maven构建生命周期描述的是一次构建过程经历了多少个事件
- Maven对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点等
插件位置:Maven – Available Plugins (apache.org)
类型有jar、test-jar
小节
- 生命周期
- 插件