Maven是一个自动化构建工具
能够将支持Maven项目的依赖包从远程仓库拉取到本地仓库,并进行依赖管理
项目中通过pom.xml来描述项目,对项目依赖进行管理与配置
给项目提供编译、打包、安装、部署支持
IDE提供了比较紧密的支持,如IDEA
在Maven项目中,会优先使用本地仓库依赖包,如果本地仓库有相应依赖包,不会去远程仓库拉取最新的依赖包
国内有很多可供直接使用的Maven仓库,提供一些常用的开源依赖包的拉取,如阿里、网易等
仓库搭建开源工具常用的有Nexus,一般中大型企业都会构建自己的Maven仓库
IDEA安装后提供了默认的Maven安装,可直接使用,也可以单独安装自己需要的版本
下载一个最新版本的Maven到本地(附件提供了一个文件版本的Maven)
在IDEA中将项目的Maven根目录指向本地安装位置,并更改配置文件settings也指向本地
同时,将Maven仓库规划到指定地址,避免重复的包每次都重新下载
另外,在有些情况下,由于网络等原因,默认的Maven配置可能无法从远程仓库拉取依赖包,此时需修改Maven安装目录下conf/settings中的mirror内容
在Spring Boot项目的pom.xml中,有一些很重要的配置,来支持快速构建一个Spring Boot项目
熟悉并掌握这些配置是后端接口开发的重要基础
这个配置的内容非常丰富,掌握常用的,需要时查询相关用法即可
group id:组织名,如com.example.demo
artifact id:项目唯一标识名,如spring-boot-demo
version:版本,如2.5.2,分别为主版本、次版本、修订版
packaging:打包方式,常用的是jar或war,分别表示自运行和web容器运行
scope:依赖库与项目的关系,默认为compile,分别表示
compile:编译和打包时需要此类库,默认
test:测试时需要此类库
provided:只在编译阶段需要,打包时不需要此类库
runtime:编译和打包时都不需要,只在运行时需要此类库
modelVersion:maven版本
build:可选,表示构建时需要的插件
【演示】
熟悉Maven配置,见附件项目springboot-demo中的pom.xml
Maven提供了一系列的指令完成一个项目的编译到打包
在IDEA工具中,右侧点击Maven面板,以可视化的方式使用这些指令
展开的Lifecyle->package中右键构建,会在项目的target目录下构建出可执行的.jar包(如果pom.xml配置的是war,则为war包)
工作中,经常会使用很多知名的第三方依赖包,如日志的、Redis集成的、数据访问集成的等
可以直接使用第三方包官网推荐方式,也可以去相应的集中式网站获取,通常有
Maven官网:https://search.maven.org/
另外一个网站:https://mvnrepository.com/
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--Maven遵循的版本项目描述符,Maven2和Maven3都使用4.0--> <modelVersion>4.0.0</modelVersion> <!--【重要】当前项目的父依赖,表示当前项目是从spring-boot-starter-parent继承下来,并使用spring-boot-starter-parent的很多默认配置--> <!--通过继承,默认让项目具有了以下功能:Java版本(Java8)、源码的文件编码方式(UTF-8)、依赖管理、打包支持、动态识别资源、 识别插件配置、识别不同的配置,如:application-dev.properties 和 application-dev.yml--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.14</version> <!--可配置资源查找路径,顺序为relativePath > 本地仓库 > 远程仓库,一般不配置,先从本地仓库找,再从远程仓库找 如果是多模块项目,子模块配置../pom.xml--> <relativePath/> <!-- lookup parent from repository --> </parent> <!--【重要】组织id--> <groupId>com.example.demo</groupId> <!--【重要】项目标识唯一id--> <artifactId>springboot-demo</artifactId> <!--【重要】版本,SNAPSHOT用于解决正式版依赖包如果本地仓库存在,不会去远程仓库拉取问题,SNAPSHOT版本不管本地仓库是否有,都会实时拉取--> <version>0.0.1-SNAPSHOT</version> <!--【重要】打包的机制,主要有jar、war、pom等,默认为jar,war用于打包部署到Web服务器,pom为分模块时父模块标识 --> <packaging>jar</packaging> <!--项目名称,用于Maven产生的文档--> <name>springboot-demo</name> <!--项目描述,用于Maven产生的文档--> <description>Demo project for Spring Boot</description> <!--自定义属性,在dependencies中使用,如${java.version},还有一些默认的内置属性和POM属性--> <properties> <java.version>1.8</java.version> </properties> <!--【重要】定义项目的依赖列表--> <dependencies> <!--【重要】每个依赖都是一个jar包,主要包括groupId、artifactId、version--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--屏蔽依赖关系,比如当前依赖包依赖com.example.dmeo-api.jar的0.1版本,但项目中其他依赖包依赖的是0.2版本了,就屏蔽掉这个依赖--> <!-- <exclusions>--> <!-- <exclusion>--> <!-- <groupId>com.example</groupId>--> <!-- <artifactId>demo-api</artifactId>--> <!-- <version>0.1</version>--> <!-- </exclusion>--> <!-- </exclusions>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.26</version> </dependency> </dependencies> <!--构建配置,与Maven中的settings.xml内容类似,主要是如果项目中需要有修改化的构建时设置--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart 这个要手动加进去 --> <fork>true</fork> </configuration> </plugin> </plugins> </build> <!--还可以单独配置仓库、插件等--> </project>
另外,现在很多项目也使用gradle,配置和打包方式类似。