服务于 Java 平台的自动化构建工具
构建:以 Java 源文件、框架配置文件、jsp、HTML、图片等资源作为”原材料“生产可以运行的项目的过程
编译:.java→.class,虚拟机进行
部署:B/S 项目运行的是动态 Web 工程编译后的结果
Maven 将 jar 包保存在项目仓库
jar 包到项目目录jar 包
jar 包都已经按照统一规范存放在 Maven 的中央仓库jar 包依赖
jar 包导入jar 包版本java 文件 → .class 文件Maven 测试模块jar 包、war 包Maven 进行运行时环境
一组 jar 包的引用,并未把 jar 包本身复制到工程中
不会在目录中出现
安装Maven核心程序步骤
JAVA_HOME 环境变量
Maven 使用 Java 编写,运行需要 Java 环境bin 目录存放执行程序conf 目录存放 Maven 配置文件MAVEN_HOME 或 M2_HOME 环境变量
bin 目录上级path 变量添加值
%MAVEN_HOME%\bincmd 窗口运行 mvn -v 命令查看 Maven 版本Maven 负责项目的自动化构建
构建的具体环节
class 字节码文件,为下一次编译做准备.class 文件junit 程序war 包jar 包war 包复制到 Servlet 容器指定目录下,使其可以运行自定义文件被其他 maven 工程引用
通过配置方式明确告诉
classpath:spring-context.xml
遵守框架内已经存在的约定
约定的目录结构
src 目录:存放项目代码
main 目录:存放主程序文件
java 目录:存放 Java 源代码文件resource 目录:存放程序使用的配置文件webapp 目录:Web 工程目录,存放 js、jsp、web.xml 等文件test 目录:存放测试程序文件,可以没有
java 目录:存放测试用的 Java 源代码文件resource 目录:存放测试程序使用的配置文件target 目录]
.class文件pom.xml 文件:Maven 核心配置文件,配置 Maven 依赖项等资源mvn clean:清理,删除之前的 targetmvn compile:编译主程序,即 src/main/java 目录下程序
target 目录mvn test-cpmpile:编译测试程序mvn test:执行测试
mvn package:打包 src\main\ 目录下文件
jar 或 war 包mvn install:安装
mvn site:生成站点Maven 需要的的插件jar 包Maven 工程Maven 核心程序仅定义抽象的生命周期
Maven 核心程序中C:用户\当前用户名\.m2\repositoryjar 资源Maven 程序解压目录中 \conf\setting.xml 文件setting.xml 文件中找到 localRepository 标签 标签对
Maven 仓库目录<localRepository>
D:\Tool\Maven\software
localRepository>
Maven 默认的官方仓库地址在国外,访问下载速度较慢
Setting.xml 文件中 标签组中
<mirrors>
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror>
<mirror>
<id>maven-default-http-blockerid>
<mirrorOf>external:http:*mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.name>
<url>http://0.0.0.0/url>
<blocked>trueblocked>
mirror>
mirrors>
Project Object Model:项目对象模型
DOM(Document Object Model):文档对象模型pom.xml 是 Maven 的核心配置文件
web.xml 对于动态 Web 工程modelVersion
指定 pom.xml 符合的 Maven 模型版本
对 Maven 2 和 3 只能是 4.0.0
<modelVersion>4.0.0modelVersion>
packaging
项目类型,描述打包后的输出类型
默认 jar 包
war、pom、rar、ear 等 <packaging>warpackaging>
dependencies、dependency:依赖标签,相当于 import
dependencies
dependency:一组标签添加一个依赖
jar 包坐标<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.9version>
dependency>
dependencies>
properties:配置属性
Maven 自带配置属性 和 自定义属性
properties 内可以使用自定义标签声明变量
${标签名} 引用变量值<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
build:maven 进行项目构建时配置信息
例如:指定编译插件 Java 代码的 JDK 版本
plugins、plugin:插件配置
configuration:配置插件信息<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>3.0.0-M3version>
<configuration>
<forkCount>0forkCount>
<testFailureIgnore>truetestFailureIgnore>
configuration>
plugin>
plugins>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
resource>
resources>
build>
parent:继承标签,继承父工程 pom.xml 文件的配置
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.4version>
<relativePath/>
parent>
module:聚合,安装各个模块
数学坐标概念
平面中 X、Y 向量唯一定义一个点
空间中 X、Y、Z 向量唯一定义一个点
Maven 坐标概念
三个向量在仓库中唯一定义一个 Maven 工程
groupid:组织 ID
一般是公司或组织 域名倒序 + 项目名
<groupid>com.baidu.demogroupid>
artifactid:模块、项目名称
<artifactid>demoartifactid>
version:项目版本号
三位数字标识 + 版本类别
SNAPSHOT
LATEST
RELAEASE
<verison>1.0.0-SNAPSHOTverison>
一般 jar 包被识别为 groupId:artifactId:version 格式
<groupid>com.baidu.demogroupid>
<artifactid>demoartifactid>
<verison>1.0.0-SNAPSHOTverison>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>
resources
maven 执行编译时把 src/main/resources 目录中文件拷贝到 target/classes 目录中src/mian/java 目录下非 Java 文件不处理,不拷贝到 target/classessrc/mian/java 目录中
src/mian/java 目录中文件
build 标签中添加 resoueces 标签IDEA 中修改语言级别
maven 项目更新后会初始化回默认语言级别
使用属性配置项目运行与编译的 JDK 版本
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>2.3.2version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
plugins>
build>
Maven版本较高时进行打包可能会有编译测试程序不通过
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>3.0.0-M5version>
<configuration>
<skipTests>falseskipTests>
<testFailureIgnore>truetestFailureIgnore>
<forkMode>onceforkMode>
configuration>
plugin>
plugins>
Maven 解析依赖信息会到本地仓库中查找被依赖的 jar 包
范围
compile
test
provided
| 作用\依赖范围 | compile | test | provided |
|---|---|---|---|
| 对主程序 | 有效 | 无效 | 有效 |
| 对测试程序 | 有效 | 有效 | 有效 |
| 打包 | 参与 | 不参与 | 不参与 |
| 部署 | 参与 | 不参与 | 不参与 |
jar 包的依赖会自动导入
jar 包依赖自动导入maven 工程自身导入的依赖compile 范围依赖无法传递
<exclusions>
<exclusion>
<groupId>项目名groupId>
<artifactId>模块名artifactId>
exclusion>
exclusions>
比如对 spring 4.0.0 版本统一升级 4.1.1
proerties 标签内使用自定义标签统一声明版本号
凡是需要统一配置引用的都可以使用
UTF-8<properties>
<maven.spring.version>
4.0.0.RELEACE
maven.spring.version>
properties>
需要统一版本的位置使用自定义标签引用声明的版本号
${自定义标签}<dependency>
<groupId>...groupId>
<artifactId>...artifactId>
<version>
${maven.spring.version}
version>
dependency>
<dependencies>
<dependencies>
<groupid>com.baidu.demogroupid>
<artifactid>demoartifactid>
<verison>1.0.0-SNAPSHOTverison>
<scope>compilescope>
dependencies>/
dependencies>
专门的测试框架
对类中的方法进行测试
每一个方法单独测试
Maven 借助单元测试批量测试类中的大量方法是否符合预期
使用步骤
加入依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>testscope>
dependency>
在 Maven 项目中 src\test\java 目录下创建测试程序
测试方法定义规则
public
@Test 注解
org.junit.Test 类生命周期:构建项目的过程,不能打乱顺序
Maven 核心程序定义了抽象的生命周期
Maven 为更好实现自动化构建的执行特点
插件
调用插件功能的命令例如
| 生命周期阶段 | 插件目标 | 插件 |
|---|---|---|
| compile | compile | maven-compiler-plugin |
| test-compile | testCompile | maven-compiler-plugin |
Clean Lifecycle
pre -clean:执行需在 clean 前完成的工作clean:移除所有上一次构建的文件post -clean执行需要在 clean 之后立刻完成的工作Default Lifecycle:构建的核心部分:编译、测试、打包、安装、部署等
validategenerate-sourcesprocess-sourcesgenerate-resourcesprocess -resources :复制并处理资源文件至目标目录,准备打包compile:编译项目的源代码process-classesgenerate-test-sourcesprocess-test-sourcesgenerate-test-resourcesprocess-test-resources:复制并处理资源文件至目标测试目录test-compile:编译测试源代码process-test-classestest:使用合适的单元测试框架运行
prepare-packagepackaeg:接受编译好的代码,打包成可发布的格式,如 jarpre-integration-testintegration-testpost-integration-testverifyinstall:将包安装到本地仓库,以便其他项目依赖deploy:将最终的包复制到远程的仓库
Site Lifecycle
pre -site:行需要在生成站点文档之前完成的工作site:生成项目的站点文档post -site :执行需要在站点文档生成之后立刻完成的工作
site -deploy:将生成的站点文档部署到特定的服务器为什么需要继承
例:junit 依赖
junit 是 test 范围依赖,不能传递
解决思路:将 junit 依赖统一提取到“父”工程
junit 依赖时不指定版本
创建 maven 工程作为父工程
pom在子工程声明对父工程的引用
使用相对于本文件的相对路径避免找不到文件
<parent>
<groupId>... groupId>
<artifactId> ... artifactId>
<version> ... version>
<relativePath>
../Parent/pom.xml
relativePath>
parent>
将子工程与父工程的坐标中重复的内容删除
父工程统一管理 junit 依赖
junit 依赖的版本号
注意:配置继承后执行安装命令需要先安装父工程
作用:一键安装各模块
配置方式:在总聚合工程配置各个参与聚合的模块
<modules>
<module>../Hellomodule>
<module>../demomodule>
modules>
使用方式:在聚合工程的 pom.xml 文件安装模块
installations:指定 Maven 核心程序的位置
user setting
conf/settings.xml 文件位置settings.xml 文件自动获取创建 Maven 版 Java 工程
maven 项目groupid、artifactid、version创建 Maven 版 Web 工程
创建项目时选择 maven 项目
添加 groupid、artifactid、version
选择 war 方式创建完成
修改配置创建 web 工程配置文件
properties 中选择 Project FacetsDynamic,再重新选中
Web 工程配置文件执行 Maven 命令
run as 执行常用命令
buidle... 手动输入命令创建文件
File → Import
General:导入普通工程
.settings、.classpath、.project 等配置文件识别是 Eclipse 的 java 工程Existing Projects into Workspaces
Maven:导入 Maven 工程
Existing Maven Projects
选择文件路径:通过 pom.xml 文件识别 maven 工程
不能将工程复制进来
mvn deploy 命令部署
<build>
<finalName>工程名finalName>
<plugins>
<plugin>
<groupId>org.codehaus.cargogroupId>
<artifactId>cargo-maven2-plugin artifactId>
<version>1.2.3version>
<configuration>
<container>
<containerId>tomcat9 containerId>
<home>D:\Tool\TomCat\apache-tomcat-9.0.13home>
container>
<configuration>
<type>existingtype>
<home>D:\Tool\TomCat\apache-tomcat-9.0.13home>
<properties>
<cargo.servlet.port> 8989 cargo.servlet.port>
properties>
configuration>
configuration>
<executions>
<eecution>
<id>cargo-runid>
<phase>installphase>
<goals>
<goal>rungoal>
goals>
eecution>
executions>
plugin>
plugins>
build>
setting.xml 文件位置VM Options 设置
-DarchetypeCatalog=internal
JRE :配置项目使用的 JDKFile → new project setting
Create from archetype:根据模板创建新项目
maven-archetype-quickstart:普通 java 项目
maven-archetype-webapp:web工程项目和正常导入模块流程相同
Maven 依赖查找网站
https://mvnrepository.com
Maven 插件官方网站
https://maven.apache.org/plugins/index.html