清理:把之前项目编译的文件删除,为新的编译代码做准备
编译: 批量的将程序源代码编译为执行代码
测试: maven可以执行测试程序代码,验证你的功能是否正确
报告: 生成测试结果的文件
打包: 把你项目中所有的class文件,配置文件等所有资源放在一个压缩文件中。
Java程序, 压缩文件是 jar 扩展名
Web 应用,压缩文件是 war 扩展名
安装: 把生成的jar、war文件安装到本地仓库中
部署: 将打包的结果部署到远程仓库或将war包部署到服务器上运行
Maven能够实现自动化构建和它的内部原理有很大关系,我们从Maven的九个核心概念入手,了解Maven是如何实现自动化构建的
① POM
一个文件名称是 pom.xml, pom 翻译过来是项目对象模型。
② 约定的目录结构
maven项目的目录和文件的位置都是规定的。
③ 坐标
唯一的字符串,用来表示资源。
④ 依赖管理
管理你的项目可以使用的jar文件。
⑤ 仓库管理
你的资源存放位置。
⑥ 生命周期
maven工具构建项目的过程。
⑦ 插件和目标
执行maven构建的时候使用的工具。
⑧ 继承
⑨ 聚合
从maven官网下载maven安装包:推荐使用 3.3.9 版本。
解压到一个非中文目录中。
配置环境变量:
指定一个M2_HOME的名称,指定其值为maven根目录的路径
M2_HOME = E:\Maven\apache-maven-3.3.9 (我的解压在了E盘的Maven文件夹中)
再把M2_HOME放到path路径中
;%M2_HOME%\bin (都学到这里分号就别再弄错啦)
或者 ;E:\Maven\apache-maven-3.3.9\bin
验证: cmd --> mvn -v
注意: 出现Error:JAVA_HOME not found in your environment.
表示你没有配置JDK,即没有用JAVA_HOME指定你的jdk路径。
出现 Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
表示安装成功了。
每一个maven项目在磁盘中都是一个文件夹
Hello/(根目录、工程名)
----/src (源代码)
----|----/main #放主程序java代码和配置文件
----|----|------/java #程序包和包中的java文件
----|----|------/resources #java程序中要使用的配置文件
----|----/test #放测试程序代码和文件
----|----|------/java #测试程序包和包中的java文件
----|----|------/resources #测试java程序中要使用的配置文件
—/pom.xml #maven的核心文件
仓库是用来放东西的, 存放maven使用的jar 和我们项目使用的jar
Maven的插件,插件也是一些jar, 这些jar 可以完成一定的功能
我们自己开发项目的模板
第三方框架或工具的jar 包
仓库的分类:
本地仓库: 个人计算机上的文件夹,存放各种jar
远程仓库:(需要网络才能使用)
① 中央仓库,最权威的,所有开发人员都共享使用的一个集成仓库。
https://repo.maven.apache.org
② 中央仓库的镜像: 相当于中央仓库的备份,在各个州的重要城市。
③ 私服: 公司内部,不对外使用
仓库的使用:
maven仓库的使用不需要人为参与。
开发人员需要的驱动 ----> maven首先查本地仓库 ----> 私服 ----> 镜像 ----> 中央仓库
即Project Object Model 项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml 文件中进行申明,以方便进行构建和描述,pom.xml 是Maven 的灵魂。
基本信息 | ||
modelVersion | Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0 | |
groupId | 组织 id,一般是公司域名的倒写。 | groupId、artifactId、version 三个元素生成了一个Maven 项目的基本坐标,在众多的 maven 项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。 |
artifactId | 项目名称,也是模块名称,对应groupId 中项目中的子项目。 | |
version | 项目的版本号。 如果项目还在开发中,是不稳定的版本,通常在版本后带-SNAPSHOT version使 用三位数字标识,例如1.1.0 |
|
packaging | 项目打包的类型,可以使用jar、war、rar、ear、pom,默认是 jar | |
依赖 | ||
dependencies和dependency | Maven 的一个重要作用就是管理jar 包,为了一个项目可以构建或运行,项目中不可避免的会 依赖很多其他的jar 包,在Maven 中,这些jar 就被称为依赖,使用标签dependency 来配置。 | |
配置属性 | ||
properties | properties用来定义一些配置属性.例如project.build.sourceEncoding.可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。 | |
构建 | ||
build | build 表示与构建相关的配置,例如设置编译插件的 jdk 版本 | |
继承 | ||
parent | 在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的 依赖、或者相同的组件配置等,也有类似 Java 的继承机制,用 parent 声明要继承的父工程的 pom 配置。 | |
聚合 | ||
modules | 在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块, 该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所 有模块,叫 Maven 的聚合。 |
Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个 Maven 项目。
groupId、artifactId 和 version 决定项目在仓库中 的路径,artifactId 和 version 决定 jar 包的名称。
公司域名倒写
自定义项目名称
自定义版本号
https://mvnrepository.com/ 中央仓库,使用 groupId 或 artifactId 作为搜索条件
dependencies 和 dependency,
一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找。 对于程序员自己的 Maven 项目需要进行安装,才能保存到仓库中。
相当于以前导入jar包。
就是maven构建项目的过程:清理、编译、测试、报告、打包、安装、部署
注意:执行以下命令必须在命令行进入 pom.xml 所在目录!
命令 | 作用 |
---|---|
mvn clean | 清理(会删除原来编译和测试的目录,即target 目录,但是已经install 到仓库里的包不会删除) |
mvn compile | 编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件) |
mvn test-compile | 编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件) |
mvn test | 测试(会生成一个目录surefire-reports,保存测试结果) |
mvn package | 打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包) |
mvn install | 安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中) |
mvn deploy | 部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中) |
clean 插件 maven-clean-plugin:2.5
resources 插件 maven-resources-plugin:2.6
compile 插件 maven-compiler-plugin
package 打包插件 maven-jar-plugin
deploy 发布插件 maven-install-plugin
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
用的是junit, junit是一个专门测试的框架(工具)。
junit测试的是类中的方法,每一个方法都是独立测试的。 方法时测试的基本单位。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期效果。
步骤:
compile(默认) | test | provided | |
---|---|---|---|
对主程序是否生效 | 是 | 否 | 是 |
对测试程序是否生效 | 是 | 是 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
在pom.xml文件中,用于定义全局变量,通过 ${property_name} 的形式引用变量的值。
定义全局变量:
<properties>
<spring.version>4.3.10.RELEASEspring.version>
properties>
应用全局变量:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 comile 和 test-comiple 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中。但是这两个目录中的其他文件都会被忽略掉,如果需要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到标签中。
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
<filtering>falsefiltering>
resource>
resources>
build>