以下内容如有侵权请联系删除
第一章 Maven简介
1.1 Maven是什么?
Maven翻译为"专家"、"内行",是Apache 下的一个纯Java开发的开源项目。
一个对Maven 比较正式的定义是这么说的:
Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。
1.2 Maven能解决什么问题
可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,下面列举几个感受一下:
1.我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
⒉我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成Eclipse、IDEA等都可以将代码即时编译。
3.世界上没有不存在bug的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
4.再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起进行打包。如果是web项目,还需要将之发布到服务器。
试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成Web站点,你会心动吗?Maven就可以解决上面所提到的这些问题。
1.3 Maven的两个核心功能【重点】
依赖管理
项目构建

第二章 Maven安装和使用
2.1 Maven下载和安装

配置maven环境变量
2.2 Maven仓库【重点】
Maven仓库的分类

Maven本地仓库的配置

Maven仓库国内镜像配置
修改 maven根目录下的conf文件夹中的setting.xml文件,在mirrors 节点上,添加内容如下:
xml
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
xml
<mirror>
<id>Central</id>
<url>http://insecure.repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>

2.3 Maven坐标和依赖

2.4 Maven工程的结构【重点】

第三章 Maven生命周期和插件
3.1 Maven常用命令
clean

compile

test

package

install

deploy
maven工程部署命令,将jar或war包部署(上传)到私服中。
3.2 生命周期
3.3 Maven插件
插件如何理解
Maven本质是一个插件执行流程,所有的工作是由插件来完成的。
这意味着 Maven 本身并不懂得如何编译你的代码、如何运行测试、如何打包成 JAR 文件。它只是提供了一个核心框架和一套生命周期。而插件就是具体去执行这些任务的"工具"。
一个生动的比喻
把 Maven 项目构建过程比作建造一栋房子(你的项目):
- Maven 核心框架:就像是项目经理和标准的建房流程手册。项目经理知道建房的阶段(打地基 -> 砌墙 -> 封顶 -> 装修),但他自己不动手。
- Maven 生命周期:就是手册里定义的固定阶段,例如 clean(清理工地)、compile(准备材料)、test(结构验收)、package(完成毛坯)、install(交付钥匙)。
- Maven 插件:就是具体的施工队和工具。
- maven-compiler-plugin 是编译施工队,负责把 Java 源代码(原材料)编译成字节码(加工好的建材)。
- maven-surefire-plugin 是测试验收队,负责运行单元测试来检查代码质量。
- maven-jar-plugin 是打包工具,负责把编译好的类文件、资源文件打包成一个 JAR 文件(毛坯房)。
总结:如何理解Maven插件?
1.核心执行者:Maven 的核心是框架,插件是干活的"工人"。
2.目标与阶段:插件提供具体的"任务",生命周期阶段是"任务清单"上的节点。Maven 通过将任务绑定到节点上来实现自动化构建。
3.高度可配置和扩展:你可以配置现有插件的参数,也可以引入第三方插件(如 Spring Boot 插件、Docker 插件等)来扩展 Maven 的功能,使其不仅能构建 Java 项目,还能管理容器、生成文档、部署应用等。
插件的调用方式
1.通过生命周期调用(最常见):
mvn compile, mvn package, mvn install
这些命令会触发整个生命周期流程,并执行对应阶段绑定的插件目标。
2.直接调用插件目标:
mvn compiler:compile, mvn surefire:test
这种方式直接指定运行某个插件的某个目标,而不管它在生命周期中的位置。常用于快速执行某个特定任务。
手动配置插件
当执行 mvn clean compile test package install 这些基本命令时,Maven 会使用默认插件及其默认配置。
当项目需求与Maven的默认配置不一致时,就需要配置插件了。配置插件本质上是一种"个性化定制"。
例如:
指定JDK版本插件(最常见)
不配置:可能默认用 JDK 1.5 编译,你的 Lambda 表达式会报错。
配置:在 pom.xml 中明确指定使用 JDK 8、11 或 17。
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
再例如:
maven插件还提供了tomcat插件,这样就不需要安装和配置一个外部的、独立的 Tomcat 服务器,就能直接运行、调试和部署 Web 项目。
xml
<project>
...
<packaging>war</packaging> <!-- 打包类型必须是 war -->
...
<build>
<finalName>mywebapp</finalName> <!-- 决定 WAR 包名称和上下文路径 -->
<plugins>
<!-- 配置 Tomcat Maven 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version> <!-- 注意版本 -->
<configuration>
<!-- 配置服务器端口 -->
<port>8080</port>
<!-- 配置应用的上下文路径,如果设为 `/` 则直接通过 http://localhost:8080 访问 -->
<path>/</path>
<!-- 以下是部署到外部 Tomcat 时才需要的配置 -->
<!-- <url>http://remote-server:8080/manager/text</url> -->
<!-- <server>TomcatServer</server> --> <!-- 对应 Maven settings.xml 中的服务器ID -->
</configuration>
</plugin>
</plugins>
</build>
</project>
3.3 Maven概念模型【了解】

第四章 IDEA创建Maven工程【重点】
4.1 IDEA配置本地Maven环境(全局...)
xml
-DarchetypeCatalog=internal -Dfile.encoding=GB2312
4.2 IDEA创建工程
java工程
指定maven环境的jdk版本和字符集模板
xml
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
Web工程【重点】
4.3 发布web工程
基于idea集成Tomcat软件完成web工程部署

基于maven的Tomcat插件运行web项目
maven的Tomcat插件模板配置:
xml
<build>
<plugins>
<!-- 设置编译版本为1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--配置maven的Tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>

4.4 依赖管理
4.5 IDEA设置maven打包的jar包名称

第五章 Maven中pom、jar、war三种打包方式区别

第六章 Maven高级
6.1 依赖传递

6.2 依赖冲突和解决办法
依赖冲突:由于依赖的传递特性,导致依赖jar包的导入混乱,可能导致项目出现问题。
解决方法:约定俗称,排除依赖,锁定版本
约定俗称
排除依赖

锁定版本
锁死版本号,避免版本号冲突
1、定义公共版本号
2、锁定版本
3、导入依赖
xml
<!--
锁定版本号
1、定义公共版本号
2、锁定需要依赖的版本号(锁定版本,不会真正的引入依赖)
3、引入坐标依赖
-->
<!-- 1、定义公共版本号-->
<properties>
<!--自定义版本号常量-->
<spring.version>5.1.6.RELEASE</spring.version>
</properties>
<!--2、锁定需要依赖的版本号-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!--引入常量:${常量名}-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--3.引入依赖(不能写版本号)-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
</dependencies>
6.3 聚合工程
第七章 maven私服(了解)
7.1 私服下载安装

7.2 私服的安装和启动

7.3 私服中仓库的种类

7.4 将本地的工程打包存入私服
(1)找到maven的setting.xml配置文件,设置私服访问密码
xml
<servers>
<!--对应三个宿主仓库中 -->
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
(2)找到带上传工程pom.xml配置文件,设置需要上传到的服务路径
xml
<distributionManagement>
<repository>
<id>releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
(3)执行maven命令上传--deploy
7.5 从私服下载jar包
(1)在maven安装目录的conf文件中的settings配置文件中配置profile
xml
<profile>
<!--profile的id -->
<id>dev</id>
<repositories>
<repository> <!--仓库id,repositories可以配置多个仓库,保证id不重复 -->
<id>nexus</id> <!--仓库地址,即nexus仓库组的地址 -->
<url>http://localhost:8081/nexus/content/groups/public/</url> <!--是否下载releases构件 -->
<releases>
<enabled>true</enabled>
</releases> <!--是否下载snapshots构件 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories> <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository> <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
(2)在maven安装目录的conf文件中的settings配置文件中激活profile
xml
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
第八章 将第三方jar存入本地仓库或者私服
8.1 安装第三方jar包到本地仓库
进入jar包所在目录运行
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
打开cmd直接运行
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\授课资料\资料:maven【高级】\安装第三方jar包\fastjson-1.1.37.jar
8.2 安装第三方jar包到私服
(1)在settings配置文件中添加登录私服第三方登录信息
<server>
<id>thirdparty</id>
<username>admin</username>
<password>admin123</password>
</server>
(2)进入jar包所在目录运行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
(2)打开cmd直接运行
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=C:\my_java\授课资料\资料:maven【高级】\安装第三方jar包\fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

8.3 图形化安装第三方jar包到私服
如果上传的jar包有pom文件