一、maven介绍

1.1 什么是maven

maven英文翻译为:内行、专家的意思
image.png
maven是一个项目管理工具,它包含了一个项目对象模型(pom: project object model),一组标准集合,一个项目生命周期,一个依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑。

1.2 maven能解决什么问题

  1. 在一个比较大的工程中,每用到一种jar包,我们都需要手动引入工程目录,而且经常会遇到jar包冲突,版本冲突问题
  2. 我们写好的java文件,需要将其编译成二进制class文件,并最终打成一个jar包才能运行起来
  3. 我们写的代码,需要进行单元测试,然后一个一个运行起来检查代码质量
  4. 我们的代码中存在大量的配置文件,我们需要将代码和配置文件、各种资源整合在一起,定型打包,如果是web项目,还需要将之发布到服务器。

以上所有的问题maven都可以帮助我们解决!

1.3 maven依赖管理

传统java项目,需要将依赖的包下载到本地,然后添加到具体项目中去。非常麻烦。
maven管理的项目:
image.png

1.4 maven的一键构建

我们的项目正常需要,编译、测试、运行、打包、安装、部署等一系列过程。
构建:指的是编译、测试、运行、打包、安装、部署等一系列过程全部都交给maven来管理,这个过程叫做构建。
Maven规范化构建流程:
maven 将项目构建的过程进行了标准化,每个阶段都使用一个命令完成。
image.png

二、maven 安装

2.1 maven 下载

maven官方网站 :https://maven.apache.org/
windows版本下载
image.png

2.2 安装并配置

安装:直接解压zip包即可
image.png
重要的地方conf,settings.xml文件,自主定义我们的配置。
配置环境变量: 首先保证你本地java环境变量已经配置完成。
image.png
配置完成后运行mvn- v 命令可查看maven 版本信息:
image.png

三、maven仓库

3.1 仓库种类

maven中有三种仓库:

  • 本地仓库
  • 远程仓库(私服)
  • 中央仓库

image.png

3.2 修改本地仓库地址

路径在maven安装路径下面的conf文件夹下,修改settings.xml文件。
image.png
修改远程仓库地址为阿里云地址,提高下载速度:

  1. <mirror>
  2. <id>alimaven-central</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>aliyun maven</name>
  5. <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
  6. </mirror>

四、maven 的使用

4.1 maven的目录结构

maven 的标准目录结构
src/main/java 核心代码部分
src/main/resources 配置文件部分
src/test/java 测试代码部分
src/test/resources 测试配置文件

4.2 maven常用命令

mvn clean: 清除
mvn compile:编译
mvn test:测试
mvn package:打包
mvn install:安装
mvn deploy: 需要一些配置

五、maven项目对象模型

项目对象模型Project Object Model:
pom.xml:是maven工程最重要的配置文件,在这个文件中声明了都要导入哪些jar包。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <!-- pom 模型标准版本-->
  6. <modelVersion>4.0.0</modelVersion>
  7. <groupId>com.ericsson</groupId> <!-- groupId 说明当前项目是哪个公司开发的,公司网址的反转-->
  8. <artifactId>afv-platform</artifactId> <!-- artifactId 说明当前是什么模块或项目-->
  9. <packaging>jar</packaging> <!-- 打包类型jar、war、pom-->
  10. <version>1.0-SNAPSHOT</version> <!-- 当前项目的版本-->
  11. <artifactId>service-base</artifactId>
  12. <dependencies> <!-- 当前项目依赖的jar包的坐标-->
  13. <dependency>
  14. <groupId>com.ericsson</groupId>
  15. <artifactId>common-utils</artifactId>
  16. <version>1.0-SNAPSHOT</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>com.alibaba</groupId>
  20. <artifactId>fastjson</artifactId>
  21. </dependency>
  22. </dependencies>
  23. <build> <!-- 构建打包用的插件-->
  24. <plugins>
  25. <plugin>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-maven-plugin</artifactId>
  28. </plugin>
  29. </plugins>
  30. </build>
  31. </project>

在我们的本地仓库可以找到我们的jar包。
依赖包的中央仓库地址:https://mvnrepository.com/

六、idea集成maven

在settings.xml文件中,修改maven使用的jdk版本:

  1. <profile>
  2. <id>jdk1.8</id>
  3. <activation>
  4. <jdk>1.8</jdk>
  5. <activeByDefault>true</activeByDefault>
  6. </activation>
  7. <properties>
  8. <maven.compiler.source>1.8</maven.compiler.source>
  9. <maven.compiler.target>1.8</maven.compiler.target>
  10. <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  11. </properties>
  12. </profile>

配置使用我们自己下载的maven 插件:File->Settings->Build,Execution,Deployment->Maven
image.png

七、创建第一个maven项目

  1. File->New ->Project->选择maven项目

image.png

  1. 填写GAV坐标

image.png

  1. 可以看到maven的目录结构

image.png
添加依赖包:
直接去中央仓库查询需要的jar包的GAV坐标即可。

idea 完成maven 的生命周期:
image.png

八、maven的依赖范围

8.1 依赖范围

  1. <scope> </scope> <!--默认compile-->
  • compile 编译 运行 测试
  • test 测试期间,只在测试的时候这个jar可以使用,最终打包和部署忽略这个jar包
  • provided 已提供,告诉maven这个jar包未来在我的服务器中有,不需要将它打包放在工程里

    8.2 依赖传递

    一个工程依赖另外一个工程,那么另外工程的依赖传递过来。
    排除不想依赖的包。
    自己工程有的jar包依赖 会覆盖 另外一个工程传递 过来的依赖。 看路径长度。
    路径相同,声明优先

    8.3 properties统一管理版本

    1. <properties>
    2. <mybatis-plus.version>3.3.1</mybatis-plus.version>
    3. <mysql.version>8.0.21</mysql.version>
    4. <druid.version>1.1.10</druid.version>
    5. </properties>

    九、maven继承和聚合

    9.1 继承

    项目之间可以有父子关系,父工程(pom)类型
    1. <parent>
    2. <artifactId>service</artifactId>
    3. <groupId>com.ericsson</groupId>
    4. <version>1.0-SNAPSHOT</version>
    5. </parent>
    jar包管理。父工程里面的jar包,默认子工程里都有

    9.1 聚合

    1. <modules>
    2. <module>service-ucenter</module>
    3. <module>service-mgt</module>
    4. </modules>