一、Maven简述
1.1 什么是Maven?
Apache Maven
是一款基于 Java 平台的项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
简单来讲Maven就是一个构建工具,用来管理我们的项目和依赖(jar),这样我们能把更多的精力放在开发上。
当然除了学习Maven外后期还会接触Gradle等构建工具。(之前搞安卓的时候接触过Gradle🐘)
Apache Maven官网:https://maven.apache.org/
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
-
提供了一套标准化的项目结构(所有IDE使用Maven构建的项目结构完全一样)
-
提供了一套标准化的构建流程(如 编译、测试、打包(jar包)、发布等)
-
提供了一套依赖管理机制(使用Maven坐标配置来管理各种依赖)
1.2 Maven模型
- POM(Project Object Model)项目对象模型。
- Dependency 依赖管理模型。
- Plugin 插件。
1.3 Maven仓库
Maven Repository(Maven仓库)
Maven中有如下3种仓库:
-
本地仓库,自己电脑上的仓库(存jar包的位置)
-
私服仓库,速度比中央仓库要快,通常都是由一些公司、组织搭建的私有仓库,用于同步中央仓库上的文件。
-
中央仓库:在互联网中,由Apache团队维护,包含了基本所有的jar包,版权原因不包含Oracle的驱动包
-
中央仓库地址:https://mvnrepository.com
二、Maven的安装配置
2.1 下载Maven
新版Maven的下载地址:https://maven.apache.org/download.cgi
通常比较新的东西不太稳定,接下来我们下载一个maven3.6.1Windows版。
Maven3.6.1下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries
下载成功后,将Maven文件夹移动到你的工作目录并解压包即可。
Maven目录结构如下:
- bin目录:存放一些可执行命令。(例如 mvn命令)
- boot目录:该目录下只有一个文件
plexus-classworlds-xxx.jar
,这个文件它是一个类加载器框架,相对于默认的 java 类加载器,它提供了更丰富的语法以方便配置,Maven 使用该框架加载自己的类库。 - conf目录:存放maven相关的配置文件。(例如 setting.xml)
- lib目录:存放maven依赖的jar包。(Maven也是使用java开发的,所以它也需要依赖其他的jar包)
2.2 配置环境变量
1、新建系统变量MAVEN_HOME
变量名 | 变量值 |
---|---|
MAVEN_HOME | D:\Program Files\Environment\apache-maven-3.6.1(Maven的安装目录/位置) |
2、在系统变量path中引用这个变量
变量名 | 变量值 |
---|---|
Path | %MAVEN_HOME%\bin |
3、在命令提示符窗口中输入mvn -version
mvn -version
出现上述结果,表示Maven已经安装成功啦。
当然Maven的卸载也很简单,将Maven的工作目录删除,然后删除它的环境变量即可。
2.3 配置本地仓库
1、在Maven的工作目录中创建一个maven_repo
文件夹,用来存放我们以后从中央仓库下载的jar包。
2、在conf/setting.xml
文件中配置一个<localRepository>
标签,并指向本地仓库位置。
<localRepository>D:\Program Files\Environment\apache-maven-3.6.1\maven_repo</localRepository>
配置之后,项目需要的依赖jar包如果本地仓库没有的话就需要去中央仓库下载,但是中央仓库在国外,速度会很慢,这时我们可以配置镜像服务器,只需要在conf/setting.xml
中添加镜像地址即可。
2.4 配置阿里云镜像加速
在conf/setting.xml文件的<mirrors>
标签中添加阿里云私服。
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2.5 配置使用JDK8编译
maven3.6.1版本默认的jdk版本是1.5,就会导致项目的兼容性问题,所以需要配置成1.8。
在 conf/settings.xml
中的 <profiles>
标签内配置:
<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>
</profiles>
三、Maven的基本使用
3.1 Maven常用命令
Maven常用命令:
-
编译(compile)
-
清理(clean)
-
打包(package)
-
测试 (test)
-
安装(install)
命令详解:
mvn compile # 编译项目的源代码(会class字节码文件放在target目标目录中)
mvn clean # 清除项目中target目录
maven package # 将编译后的代码打包,如jar、war或者ear文件
mvn test # 运行应用程序中的单元测试
mvn install # 将项目包安装到本地仓库,这样项目包就可以用作其他本地项目的依赖
注意:执行maven命令需要当前目录有pom文件,然后在cmd窗口执行命令。
3.2 Maven的生命周期
Maven构建项目的生命周期描述的是一次构建过程经历经历了多少个事件。
Maven 对项目构建的生命周期划分为3套:
- clean:清理工作。
- default:核心工作,例如编译,测试,打包,安装等。
- site:产生报告,发布站点等。
注意: 同一生命周期内,执行后面的命令,前边的所有命令都会自动执行。
例如 小张对maven项目进行打包操作,执行流程就是编译->测试->打包。
也就是同一生命周期内,执行后面的命令,前边的所有命令都会自动执行。
3.3 在IntelliJ IDEA中配置Maven
参考文章:https://blog.youkuaiyun.com/QZP51ZX/article/details/107522316
1、设置IntelliJ IDEA使用本地安装的Maven,并修改配置文件路径:
2、设置maven在不联网的情况下使用本地插件构建项目:
-DarchetypeCatalog=internal
然后重启IntelliJ IDEA即可!
3.4 Maven坐标详解
1、Maven坐标是用来干什么的?
- Maven坐标指的是资源的唯一标识;
- 使用坐标来构建项目或者引入项目中需要的依赖(dependency)
2、Maven坐标主要组成:
- groupId:定义当前Maven项目隶属组织名称(通常是公司域名反写,例如: com.baidou)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:定义当前项目的版本号(SNAPSHOP快照版本,RELEASE稳定版本 )
3.5 使用IDEA创建Maven普通项目
maven项目结构详解:
可以在IDEA安装一个MavenHelper,简化Maven的使用。
3.6 使用IDEA导入Maven项目
1、选择右侧Maven面板,点击+
号。
2、选中对应项目的pom.xml
文件,双击即可。
3、如果没有Maven面板,选择View → Appearance > Tool Window Bars
即可。
3.7 使用IDEA构建Maven Web项目
1、创建一个Maven-Web项目
2、向pom.xml中引入Tomcat插件,并刷新依赖
<build>
<plugins>
<!-- Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port> <!-- 访问端口 -->
<path>/</path> <!-- 访问路径 -->
</configuration>
</plugin>
</plugins>
</build>
3、启动Tomcat
控制台出现如下结果表示启动成功。
4、测试访问 http://127.0.0.1:8080
3.8 使用Maven构建SpringBoot项目
Maven 的配置:
<!--阿里云镜像源-->
<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>
<!--切换jdk编译版本-->
<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>
</profiles>
1、 创建一个普通Maven项目
2、向 pom.xml 文件中引入依赖
<!--父级依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
ok已经成功将依赖导入到项目中!
3、创建一个入口程序,用于启动SpringBoot应用程序
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot启动类
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
4、编写业务
package com.baidou.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "你好 SpringBoot!!!";
}
}
5、测试运行
执行启动类中的main方法便可以运行这个springboot应用:
ok项目已经启动成功啦!
测试访问:http://localhost:8080/hello
6、简化配置,在resources目录中创建一个application.properties
文件
# 修改tomcat服务器的端口号
server.port=8089
重新启动项目,并测试 http://localhost:8089/hello
7、简化部署
向pom.xml引入打包插件,这样就可以将项目打成jar包,然后部署到服务器上啦。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
点击右侧的maven->Lifecycle->package
:(maven打包操作)
然后target目标目录中便会自动生成该项目的jar包;
运行jar文件:java -jar xxx.jar
。
四、依赖管理
4.1 使用坐标导入jar包
Maven中央仓库:https://mvnrepository.com
1、在pom.xml中编写<dependencies>
标签。
2、在<dependencies>
标签中使用<dependency>
引入坐标。
3、定义坐标的groupld
,artifactld
,version
。
4、点击刷新按钮,使坐标生效。
4.2 依赖范围
依赖范围(scope)指的是该jar包在哪个阶段时才会有效,只要在对应的依赖坐标里配置<scope>
标签,便可以控制依赖的作用范围。也就是设置对应jar包的作用范围:编译环境、测试环境、运行环境。(不写的话默认值是compile )
依赖范围指的是坐标的依赖范围,
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope> <!--只在测试环境有效-->
</dependency>
依赖范围 | 编译有效 | 测试有效 | 运行时有效 | 打包有效 | 例子 |
---|---|---|---|---|---|
compile | √ | √ | √ | √ | spring-core |
test | x | √ | x | x | junit |
provided | √ | √ | x | x | servlet-api |
runtime | x | √ | √ | √ | JDBC驱动 |
system | √ | √ | x | x | 本地maven仓库 之外的类库 |
4.3 解决依赖冲突问题
参考文章:https://blog.youkuaiyun.com/lovequanquqn/article/details/81627807