maven
- maven是apache组织下一个开源项目,是软件项目管理的综合工具;
1 特性
- 自动下载软件项目依赖的包;
- maven管理下的项目结构相同;
- pom.xml文件下维护项目所使用的包;
- 所有的代码都在src/main/java,所有的测试代码都是src/test/java;
2 环境变量的配置
2.1 windows配置
2.2 linux的环境变量
export MAVEN_HOME=/Users/xdclass/Documents/software/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
3 maven仓库
3.1 maven仓库的分类
- 本地仓库(.m2/repository);
- 远程仓库
- 中央仓库(从国外下载比较慢,一般使用镜像);
- 私服;
- 镜像: 仓库A可以获取仓库B所有的jar包,就把B称为仓库A的镜像;提供了一个切换地址的渠道;
- 镜像的配置maven目录下etc/settings.xml
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
3.2 仓库的调用顺序
- 下载jar包时,调用仓库的顺序;
- 未配置第三方库的情况
- 先去本地库里面去查找,然后去中央仓库里面去查找,如果中央仓库没有找到则报错;
- 配置了第三方库的情况;
- 先去本地库里面找,然后去中央仓库里面找,然后到第三方库里面找(也可以先去三方库里面找,然后去中央仓库里面寻找,根据配置情况所定),如果第三方库里面没有找到则报错。
- 未配置第三方库的情况
3.3 第三方库的配置
- 按照顺序查找库
<repositories>
<repository>
<id>cloudera</id>
<name>cloudera</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
<repository>
<id>cloudera1</id>
<name>cloudera2</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
- repositories和mirrorOf关系:镜像的实际作用就是拦截repositories的请求,修改包的地址。
- 例如:repositories 的地址是https://repository.cloudera.com/artifactory/cloudera-repos/经过拦截过后就会变成mirrors配置的镜像地址http://maven.aliyun.com/nexus/content/groups/public。
3.4 mirrorOf和repository的关系
- mirrorOf设置为 central 所有的请求都会被mirror拦截;
- mirrorOf设置为 * 匹配所有的repositories下的id 配置的所有的第三方库都会被拦截;
- mirrorOf设置为 central:* localhost和file:///不会被匹配,换句话话说就是本地的匹配本地的仓库;
- mirrorOf设置为 req1、req2 repositories下req1、req2第三方库都会被拦截;
- mirrorOf设置为 * ! req2 意思师req2不会被被拦截 ;
4 maven的生命周期
- clean 清理项目
- build 构建项目
- 验证vaildate->编译complie->测试test->打包package->检查verify->安装install->部署deploy
- site 项目文件处理
5 使用IDEA构建maven项目
6 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>
<!--公司或者组织的唯⼀一标志,⼀一般是⽹网站名称反过来写-->
<groupId>com.demo</groupId>
<!-- 项⽬目的唯⼀一ID,⼀一个groupId下⾯面可能多个项⽬目,就是靠artifactId来区分的 -->
<artifactId>test</artifactId>
<!-- 项⽬目版本号 -->
<version>1.0-SNAPSHOT</version>
<!-- 项⽬目打包形式,常⻅见的是 war、jar-->
<packaging>jar</packaging>
<!--项⽬目名称-->
<name>xd_video</name>
<!--项⽬目描述-->
<description>Demo project for Spring Boot</description>
<!--依赖-->
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.61</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
</dependencies>
<!--第三方库-->
<repositories>
<repository>
<id>cloudera</id>
<name>cloudera</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
<repository>
<id>cloudera1</id>
<name>cloudera2</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
</project>
7 maven的项目结构和指令
7.1 项目结构
- src
- main
- java
- resources
- web-app
- index.jsp
- css js html 静态资源的项目
- test
- java
- resources
- main
- target 存放的编译好的war包 jar包 静态文件
7.2 常用命令
- mvn clean 清理编译文件;
- mvn install 项目部署到本地仓库;
- mvn package 项目打包的本地项目;
- mvn dependency:tree 查看文件的本地树;
- intall的区别
- maven package只是把包打在⾃自⼰己的项目下;
- maven install会把包打在maven本地仓库下,可以给依赖它的其他项目调用 ;
- maven常⽤用参数
- -D 指定参数,-Dmaven.test.skip=true 跳过单元测试;
- mvn install -Dmaven.test.skip=true;
- -p 指定profile配置,⽤用于区分环境;
- -D 指定参数,-Dmaven.test.skip=true 跳过单元测试;
- web项⽬目命令
- mvn tomcat:run 启动tomcat