Maven 是目前最流行的自动化构建工具,Maven是一款在大型项目开发过程中不可或缺的重要工具。
其中5.6.7.8属于Maven项目构建的过程,所以Maven不仅可以完成jar包的管理,还能完成项目的构建。
项目构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。maven支持的构建包括有:
部署一般采用手动完成,前6个步骤都是通过Maven进行实现。
POM:Maven的核心,它是一个文件,名称通常为pom.xml,开发人员通过管理pom.xml可以完成控制maven构建项目的过程以及jar包依赖的管理。
约定的目录结构 : maven项目的目录和文件的位置都是规定的。
坐标 : 是一个唯一的字符串,用来表示资源的。
依赖管理 : 管理项目中可以使用的jar文件。
仓库管理(了解) :资源存放的具体位置。
生命周期 (了解) : maven工具构建项目的过程,就是生命周期。即Maven项目构建的7个步骤就代表Maven的生命周期。
插件和目标(了解):执行maven构建的时候用的工具是插件
继承(后期讲解)
聚合(后期讲解)
可以使用maven的命令完成相关操作,同时也可以在idea中直接使用maven,代替命令。
Maven的构建直接看视频即可。
mvn compile
:编译src/main/java
下的所有java
文件,生成class文件,正确执行mvn compile
命令的结果是在项目的根目录(Hello)下生成target目录,maven对java文件进行编译,将编译完成的class文件放在target/classes
中
pom在maven中是一个pom.xml文件,该文件是maven的灵魂,maven的项目构建以及管理依赖的功能都是通过编写该文件实现的。
唯一值, 在互联网中唯一标识一个项目的。坐标由三部分构成
<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定版本号</version>
打包后压缩文件的扩展名,默认是jar ,web应用是war
dependencies
和dependency
,相当于是 java代码中import
你的项目中要使用的各种资源说明, 比我的项目要使用mysql驱动
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
先在本地仓库中找mysql文件夹(groupId对应的文件夹),找到后在mysql文件夹中找mysql-connector-java文件夹(artifactId对应的文件夹),最后在mysql-connector-java文件夹中找5.1.9版本对应的文件夹(version对应的文件夹),然后把对应的jar包引入我们的项目中,如果有任意一步没找到对应文件夹,则从中央仓库拉取。
Maven的一个重要作用就是管理jar包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些jar就被称为依赖,使用标签dependency来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven把所有的 jar 包也都视为项目存在了。
properties 是用来定义一些配置属性的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码。同时也可以设置项目的运行的Java版本。
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
build表示与构建相关的配置,例如设置编译插件的 jdk 版本
<build>
配置插件
<plugins>
配置具体的插件
<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>
告诉Maven 我们写的代码需要在jdk1.8下运行
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、 version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机 制,用 parent 声明要继承的父工程的 pom 配置。
在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的 其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有 模块,叫 Maven 的聚合。
Maven的生命周期指的就是maven构建项目的过程,包括清理、编译、测试、报告、打包、安装、部署这几个阶段。这几个阶段都可以通过Maven相对应的命令进行完成。
Maven的插件:在Maven执行命令的过程中,真正完成命令对应功能的就是这些插件。这些插件就是一些jar文件。
(1)加入依赖,在pom.xml加入单元测试依赖
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
(2)在maven项目中的src/test/java
目录下,创建测试程序。
推荐的创建类和方法:
1.测试类的名称:Test + 你要测试的类名(注意类名Test必须大写,否则报错)
2.测试的方法名称:Test + 方法名称
例如你要测试Hello类中的add方法,则创建测试类TestHello
@Test
public void Testadd(){
测试HelloMaven的add方法是否正确
}
其中testAdd叫做测试方法,它的定义规则
1.方法是public的,必须的
2.方法没有返回值, 必须的
3.方法名称是自定义的,推荐是Test + 方法名称
4.在方法的上面加入 @Test
Maven可以独立使用,通过以下的命令就可以单独完成maven的生命周期的执行
src/main
目录下的所有文件,test不包含。)注意:执行以上命令必须在命令行进入 pom.xml 所在目录,同时比如你执行mvn test
,Maven会自动从上往下帮你执行,因此你不必在执行mvn test-compil
e等命令。
idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
(1)配置当前工程的设置,
file--settings ---Build, Excution,Deployment--Build Tools--Maven
Maven Home directory: maven的安装目录
User Settings File : 就是maven安装目录conf/setting.xml配置文件
Local Repository : 本机仓库的目录位置
--Build Tools--Maven--Runner
VM Option: -DarchetypeCatalog=internal
JRE: 你项目的jdk
maven项目创建时,会联网下载模版文件,模版文件比较大, 使用-DarchetypeCatalog=internal,不用下载, 创建maven项目速度快。
(2)配置以后新建工程的设置, file--other settings--Settings for New Project
Maven中的依赖范围利用<scope></scope>
标签表示。scope的值有 compile, test, provided ,默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的相应阶段中起作用。maven构建项目的过程即生命周期,包括编译,测试,打包,安装,部署过程(阶段)。
例如junit的依赖范围是 test,表示junit只在测试阶段使用。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
provided的含义在于:在编译、测试阶段需要提供相关的jar包,而在安装部署过程则不需要提供。