Maven学习
1、什么是Maven
- Maven是Apache基金会下的一个子项目,主要用于帮我们构建项目和依赖管理。在开发项目的过程中,会需要依赖大量的jar包,管理起来比较麻烦,所以则需要使用maven来帮我们进行管理,我们则可以把更多的精力放到开发过程中去。
2、Maven的作用
- 用于构建项目。准备好开发环境的过程。可以对项目进行打包:.jar/.war
- 用于管理项目jar包。当我们的需要使用某一jar包时,则可以在pom.xml里面配置所需要使用的依赖,当本地仓库没有时,Maven则会到远程仓库中找,把jar包下载到本地进行使用。可以有效避免缺少jar包或jar包冲突,而导致项目无法运行的问题。
3、Maven的安装和配置
- 下载地址:http://maven.apache.org/download.cgi
- 安装过程:
(1)将下载的压缩包解压到一个指定的文件夹下
(2)配置JAVA_HOME和MAVEN_HOME
(3)添加到path中
(4)验证是否配置成功
- Maven配置:
(1)设置本地仓库
<!--
在setting标签下,插入以下标签
D:maven_rep:自定义路径
-->
<localRepository>D:maven_rep</localRepository>
(2)设置远程仓库
<!--在mirrors标签下,插入以下标签-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
(3)配置Maven识别jdk1.8
<!--在profiles标签下,插入以下标签-->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
4、IDEA创建Maven项目
(1)创建项目
(2)配置maven项目
(3)创建完成
5、将Maven_JAVA项目更改为Maven_WEB项目
(1)更改为WEB项目
(2)创建WEB项目的artifacts
(3)将WEB项目添加到tomcat中
(4)测试是否更改成功
6、Maven基础命令
(1)在IDEA中调出命令出口
(2)mvn -v:用于查看maven信息
(3)mvn clean:用于清除target
(4)mvn test:用于代码测试
(5)mvn package:用于导出jar包或war包
- 默认导出jar包
(6)mvn install: 用于将jar或war包安装到本地仓库中
6、Maven坐标
- Maven通过坐标,可以定位到本地仓库中jar包。
7、依赖的作用范围
-
搜索Maven依赖信息的网站:https://mvnrepository.com/
-
compile:默认为compile。在main目标、test目录、开发过程、部署到web服务器上都有效。例如:Spring的jar包。
-
test:只在test目录、开发过程中有效。例如:junit,SpringBoot-test,SpringCloud-test。
-
provided:只在main目录、test目录、开发过程中有效。例如:servlet-api,jsp-api。因为web服务器上本身自带了这些jar包,无需我们再添加上去,所以我们只需要在开发过程中使用即可,避免jar冲突。
8、依赖的传递性和排除
- 依赖传递:compile域中的jar包,可以进行传递。test和provided域中的jar包不能传递。
- 依赖排除:使用exclusion可以对依赖进行阻断。即被exclusion标注的jar,不会被引入maven中。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.8.RELEASE</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
9、Maven的继承
- 可以有效避免子工程中的依赖版本不一致。
- 在需要修改依赖版本时,则不需要到每个子工程中进行修改,直接在父工程pom.xml修改即可,提高开发效率。
(1)父工程和子工程pom.xml配置
- 父工程pom.xml配置:
- 父工程的打包方式必须为pom格式
- 父工程的坐标不变
<!--父工程坐标-->
<groupId>fun.jiayou</groupId>
<artifactId>maven_project</artifactId>
<version>1.0-SNAPSHOT</version>
<!--父工程的打包方式必须为pom-->
<packaging>pom</packaging>
- 子工程pom.xml配置:
- 子工程的坐标指向父工程坐标
<parent>
<!--指向父工程坐标-->
<artifactId>maven_project</artifactId>
<groupId>fun.jiayou</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!--子工程的groupid和version和父工程的一致,可省略-->
<artifactId>maven_son2</artifactId>
(2)父工程和子工程依赖设置
- 父工程依赖设置(通过dependencyManagement来进行依赖管理)
<!--该标签下的依赖,对子工程只有版本控制作用,依赖依然需要到子工程中配置-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
- 子工程依赖设置(正常配置dependencies)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!--不需要写版本号,由父工程控制-->
<!--<version>5.2.8.RELEASE</version>-->
</dependency>
</dependencies>
(3)声明可引用的属性
- 将版本号提取出来(当需要修改依赖版本时,则直接修改引用属性即可)
<!--声明版本号属性-->
<properties>
<jiayou.spring.version>5.2.8.RELEASE</jiayou.spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!--引用版本号-->
<version>${jiayou.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<!--引用版本号-->
<version>${jiayou.spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
10、Maven的聚合
- 聚合:即将部分整合成一个整体。
- 聚合的作用:将工程聚合起来,在需要将工程安装到本地仓库时,maven则会自动把父工程、子工程按照正确的依赖顺序安装到仓库中,不需要一个一个手动地去安装。
- 聚合的配置:在父工程的pom.xml中,添加指定子工程的模块名
<modules>
<module>maven_son</module>
<module>maven_son2</module>
</modules>
ps:如有不足之处,请指出。我们共同进步。