概括
首先,简单介绍一下maven,maven是用来管理项目的一个工具。如当前有个需求,我需要引入mybatis的包,对于以前的话,就是创建lib文件夹,然后网上下载jar包,放入到文件夹中,然后导入到项目中。而使用maven的话,只需要在maven的pom.xml文件中,将jar包的坐标写入,此时maven就会自动下载jar包到本地文件夹中,自动导入到项目中,十分方便。
首先我们先看一下maven构建项目的基本结构
├── pom.xml (主要文件,相当于maven项目的配置文件)
├── src
│ ├── main
│ │ ├── java (存放java代码的目录)
│ │ └── resources (存放源文件的目录如properties\xml)
│ └── test (测试目录,maven打包的时候如果存在测试目录,会先调用测试类进行断言测试,非必要)
│ ├── java (测试目录的java代码,非必要)
│ └── resources (测试目录的源文件目录,非必要)
└── target
对于maven的生命周期的话,简单来说其实是这样
compile -> test-compile -> test -> package -> install
编译源码 -> 编译测试目录的代码 -> 执行测试目录代码 -> 打包 -> 下载成jar/war/rar等包
然而对于执行上述的操作的话,最主要是看 pom.xml这个配置文件,在调用 mvn install xxx
命令的时候,其实就是根据pom.xml对项目进行编译打包等操作。
由于pom.xml是最重要的文件,那我我们这篇文章就看一下pom.xml里面有那些属性。
基本上我们使用到的标签如下
<project>
<!-- 打包信息 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<!-- 属性标签 -->
<properties>...</properties>
<!-- 项目依赖 -->
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<!-- 插件信息 -->
<plugins>...<plugin>
</project>
打包信息
<!-- xml文件的头,用来定义当前xml使用的编码格式而已 -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- maven pom.xml的头定义,其实可以不用管,创建maven文件的时候自动就创建出来了 -->
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
groupId:用来表示此项目的唯一Id,可以多个模块同一个groupId
artifactId:当前项目的名称
version:项目版本号,通常 SNAPSHOT为开发版本,RELEASE为正式发布的版本
packaging:当前项目的打包方式,通常为jar/war/rar等,基本上java项目打包为jar,javeweb项目打包为war
属性标签
<!-- 用来自定义属性值的标签,使用方法如下 -->
<properties>
<!-- 首先定义一个自定义的属性值,通常命名为这样 “技术名称.版本号”,
如定义spring的版本号 -->
<spring.version>5.3.13</spring.version>
<!-- 此时就可以在pom.xml中,直接调用此属性值了,使用 ${spring.version} 就会自定义的将设置的值赋值上去 -->
</properties>
项目依赖
dependencies:用于管理当前项目依赖的项目
<dependencies>
<!-- 如要引入spring项目,则按照以下步骤导入即可
1、创建 <dependency>标签
2、dependency标签下创建 <groupId>、<artifactId>、<version>标签
3、填上相对应的项目名称及id即可
4、当然,下面还有更多的标签,如 <scope> <optional> <type>等,这些就不一一说了
-->
<dependency>
<!-- spring项目的唯一id -->
<groupId>org.springframework</groupId>
<!-- 导入spring项目的哪个模块 -->
<artifactId>spring-web</artifactId>
<!-- 版本号,当然也可以直接写版本,只是我这里为了演示上面的属性标签而已 -->
<version>${spring.version}</version>
</dependency>
</dependencies>
这三个标签只是最基本的标签而已,就连version都可以省略的,其实还有其他挺多标签的,如 optional,就可以设置父类看不到当前依赖的包,也可以设置 exclusion,引入依赖的时候排除某个项目,所以其实具体也有很多其他标签的,这些都可以上官网上看到
parent:父类的项目,如创建了两个模块,模块B在pom.xml中配置parent为模块A,则此时,模块A默认能引用模块B的依赖(排除的除外)
dependencyManagement:效果和 "dependency"一致,但是这个是在父模块中使用,是用来同意管理子模块的依赖的,比如在最高级的父模块中使用此标签的话,子模块中可以不用写version,统一使用父模块的版本
modules:也是父模块使用的,主要是用来设置一批量的子模块
<!-- 如有A,B两个子模块 -->
<modules>
<module> A </module>
<module> B </module>
</modules>
插件信息
如要编译当前maven,或者要install当前Maven项目的话,我们可以不需要去cmd中使用命令行编译,而是可以直接导入插件然后执行插件的去帮我们做事情。或者一个web的maven项目,需要启动tomcat的话,也可以使用tomcat的maven插件去做事情,如以下例子:
<plugin>
<!--
groupid\artifactid\version:这些就不解释了
extensions:true or false, 决定是否要加载这个插件的extensions,默认为true。
inherited:是否让子模块继承当前这个插件
configuration:配置属性
dependencies:与基础的dependencies的结构和功能都相同
-->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<extensions></extensions>
<inherited></inherited>
<configuration>
<classifier></classifier>
</configuration>
<dependencies>...</dependencies>
</plugin>