1. 核心概念
1.1 插件
-
Maven
实际上是一个执行插件的框架,每一个任务实际上是由插件完成的 -
在执行
Maven
命令时,实际上是插件在完成对应的功能 -
在项目中添加插件示例
<build> <!--配置插件--> <plugins> <!--测试插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.2</version> </plugin> <!--编译插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <!--告诉Maven,代码是在jdk1.8上编译的--> <source>1.8</source> <!--程序应该运行在jdk1.8上--> <target>1.8</target> </configuration> </plugin> </plugins> </build>
1.2 坐标
-
坐标作用:在本地或者互联网上唯一标识一个项目
-
坐标三个子元素:
<!-- 定义当前Maven项目隶属的实际项目 当前Maven项目和实际项目不一定是一对一的关系 --> <groupId>org.example</groupId> <!-- 当前Maven项目的名称 --> <artifactId>Hello</artifactId> <!-- 当前Maven项目的版本号 SNAPSHOT(快照):加上该后缀,表示项目处于开发阶段 --> <version>1.0-SNAPSHOT</version>
-
在引入依赖或者配置插件时,也需要根据依赖或者插件的坐标进行配置,这样才能保证唯一性
1.3 项目约定目录结构
1.4 依赖范围
- 依赖的范围:compile、test、provided,默认采用compile
2. pom.xml
示例 & 浅析
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--Maven项目模型版本号,选取固定值 4.0.0-->
<modelVersion>4.0.0</modelVersion>
<!--项目坐标-->
<groupId>org.example</groupId>
<artifactId>Hello</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包后压缩文件的类型,默认是 jar 文件-->
<packaging>jar</packaging>
<!--依赖-->
<dependencies>
<!--mysql jdbc依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql_version}</version>
</dependency>
<!--德鲁伊池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<!--Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
<!-- 单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--设置属性-->
<properties>
<!--指定java版本的一种方式,SpringBoot框架特有的属性-->
<java.version>13</java.version>
<!--自定义全局变量,用 ${变量名} 的格式使用该变量}-->
<my_var>100</my_var>
<!--自定义变量,标识mysql-connector-java版本号-->
<mysql_version>8.0.12</mysql_version>
</properties>
<!--maven在进行项目构建时的一些配置信息,例如指定编译java代码使用jdk版本等-->
<build>
<!--资源插件
默认情况下,maven不会处理 src/main/java 目录下的非java文件,但有时我们需要用到.xml、.properties等类型的配置文件
资源插件的作用就是告诉maven,在编译时,对指定文件需要进行处理,并将指定文件拷贝到target下的对应目录中-->
<resources>
<resource>
<directory>src/main/java</directory><!--所在目录-->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<!--配置插件-->
<plugins>
<!--测试插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<!--编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!--告诉Maven,代码是在jdk1.8上编译的-->
<source>13</source>
<!--程序应该运行在jdk1.8上-->
<target>13</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
3. Maven
常用命令
- 以下命令必须在
pom.xml
所在目录下执行- 以下命令按照顺序排列,在执行某一命令时,该命令之前的命令会按照顺序自动执行
-
mvn clean
- 清理(会删除原来编译和测试的目录,即
target
目录,但是已经install
到仓库的包不会删除)
- 清理(会删除原来编译和测试的目录,即
-
mvn compile
- 编译主程序(会在当前目录下生成一个
target
目录里面存放着编译主程序之后生成的字节码文件) - Tip:该命令只会编译主程序,也就是
main
目录下的java
文件 - 还会把
main/resources
目录下的所有文件拷贝到target/classes
目录下
- 编译主程序(会在当前目录下生成一个
-
mvn test-compile
- 编译测试程序(会在当前目录下生成一个
target
,里边存放着编译测试程序之后生成的字节码文件) - Tip:该命令只编译测试程序,也就是
test
目录下的java
文件
- 编译测试程序(会在当前目录下生成一个
-
mvn test
- 测试,会生成一个目录
surefire-reports
(在target
目录下),保存测试结果)
- 测试,会生成一个目录
-
mvn package
- 打包主程序(会编译、编译测试、测试,并且按照pom.xml配置把主程序打包生成
jar
包或者war
包)
- 打包主程序(会编译、编译测试、测试,并且按照pom.xml配置把主程序打包生成
-
mvn install
- 安装主程序(会把本工程打包,并且按照本工程的坐标保存在本地仓库中)
-
mvn deploy
- 部署主程序(会把本工程打包,按照本工程的坐标保存在本地仓库中,并且还会保存在私服仓库中,还会自动把项目部署在
web
容器中)
- 部署主程序(会把本工程打包,按照本工程的坐标保存在本地仓库中,并且还会保存在私服仓库中,还会自动把项目部署在
-
mvn install
- 安装主程序(会把本工程打包,并且按照本工程的坐标保存在本地仓库中)
-
mvn deploy
- 部署主程序(会把本工程打包,按照本工程的坐标保存在本地仓库中,并且还会保存在私服仓库中,还会自动把项目部署在
web
容器中)
- 部署主程序(会把本工程打包,按照本工程的坐标保存在本地仓库中,并且还会保存在私服仓库中,还会自动把项目部署在