Maven是一个项目管理工具。它可以帮助程序员构建工程,管理jar 包,编译代码,完成测试,项目打包等等。
一键构建, 依赖管理。
进入https://maven.apache.org/download.cgi即可完成下载
由于Maven是由Java语言开发的,运行时依赖Java环境,所以要在 计算机的环境变量中配置 JAVA_HOME
为了更方便的使用Maven命令,需要在环境变量中配置 MAVEN_HOME
和 Path
打开CMD命令窗口,输入 mvn -v
,显示Maven版本和Java版本,证 明安装成功
POM工程
POM工程是逻辑工程,Maven并不会对该类型工程做打包处 理,这些工程往往不包含具体的业务,而是用来整合其他工程 的。
JAR工程
普通Java工程,在打包时会将项目打成jar包。
WAR工程 JAVA Web工程,在打包时会将项目打成war包。
使用maven完成项目的构建的过程中,包括:验证、编译、测试、 打包、部署等过程,maven将这些过程规范为项目构建的生命周期。
maven有三套相互独立的生命周期。
分为是构建生命周期, clean生命周期(清理构建后的文件)、site生命周期(生成项 目报告)。
Maven依赖插件来执行命令,比如clean、validate等命令是 maven自带的,tomcat7命令是引入的第三方插件。
本地仓库指用户计算机中的文件夹。用来存储从远程仓库或中央仓库下载的jar包,只有下载到本地仓库的jar包才能使用,项目使用 jar包时优先从本地仓库查找。
远程仓库一般指私服,它是架设在局域网的仓库服务,可以从中央 仓库下载资源,供局域网使用,从而减少每个程序员都从中央仓库 下载浪费的带宽。
如果项目需要的jar包本地仓库没有,则会去远程仓库下载,下载到 本地仓库即可使用。
远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配 置远程仓库,则会直接从中央仓库下载。
中央仓库是互联网上的服务器,是Maven提供的最大的仓库,里面 拥有最全的jar包资源。
如果项目需要的jar包,本地仓库和远程仓库都没有,则会去中央仓 库下载,下载到本地仓库使用。
Maven中央仓库访问页面:https://mvnrepository.com/
本地仓库的默认位置是 ${user.dir}/.m2/repository
,${user.dir}
表示 windows用 户目录,我们可以通过修改 ${MAVEN_HOME}\conf\settings.xml
,修改本地仓库 的位置。
在Maven的conf文件下找到settings.xml
文件,修改文件中如下标签
<localRepository>F://repositorylocalRepository>
由于中央仓库访问速度较慢,可以配置镜像代理中央仓库的下载请求。在
下的
中添加如下标签即可配置镜像:
<mirror>
<id>nexus-aliyunid>
<mirrorOf>centralmirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>
创建maven项目的时候,默认使用的JDK是1.5版本,验证语法、编译、运行时都会按照JDK1.5操作,这样就有很多语法无法使用。我们本机安装的JDK是JDK11,可以配置maven按照JDK11创建项目。
在
下的
中添加如下标签即可配置JDK版本:
<profile>
<id>jdk-11id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>11jdk>
activation>
<properties>
<maven.compiler.source>11maven.compiler.source>
<maven.compiler.target>11maven.compiler.target>
<maven.compiler.compilerVersion>11maven.compiler.compilerVersion>
properties>
profile>
在使用Idea开发项目时,可以整合Maven插件进行一键构建和依赖管理。Idea自带Maven插件,我们也可以指定自己下载的Maven插件。
依据图片指示,选择本地maven安装目录,指定settings配置文件。
之后,点击File — New Projects Settings — Settings for NewProjects,再设置一遍Maven,使得新项目也可以使用同样的Maven配置。
pom文件最上方是项目基本信息:
- groupId
groupId一般定义项目组名,命名规则使用反向域名。- artifactId
artifactId一般定义项目名,命名使用小写字母。项目发布后,它的坐标是groupId+artifactId。- version
version定义版本号。版本号一般有三段,第一段:革命性的产品升级。第二段:新功能版本。第三段:修正一些bug。- packaging
packaging定义打包方式。
中定义一些配置信息:
中定义依赖的jar包坐标:
中定义第三方插件:
web项目依赖tomcat运行,所以添加tomcat7插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>8080port>
<path>/path>
<uriEncoding>UTF-8uriEncoding>
<server>tomcat7server>
configuration>
plugin>
plugins>
运行项目,按照如图步骤,配置使用maven中的tomcat7插件运行项目:
点击OK后配置完成,点击Idea的运行符号即可使用maven中的tomcat7插件运行项目。
通过在
中添加
,可以设置依赖的作用范围,有以下取值:
测试即在交付前对写好的代码进行评测,分为黑盒测试和白盒测试:
单元测试是指对软件中的最小可测试单元进行检查和验证,Java里单元测试指一个类的功能。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
Junit是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。从分类中属于白盒测试。
在测试类中,@Before修饰的方法会在测试方法之前自动执行,@After修饰的方法会在测试方法执行之后自动执行。之后的学习中,我们可以设置前置方法为获取资源,后置方法为释放资源。
@Before
public void before(){
System.out.println("开始测试");
}
@After
public void after(){
System.out.println("结束测试");
}
如果路径相同,那么谁先声明就使用哪个谁的版本
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.2.12.RELEASEversion>
<exclusions>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
exclusion>
exclusions>
dependency>
使用了
标签来排除 spring-aop 模块的引入。这意味着在引入 spring-context 模块时,不会自动引入 spring-aop 模块。
在Maven中为某个jar包配置锁定版本后,不考虑依赖的声明顺序和依赖路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。以下可以直接配置spring-aop锁定的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>4.2.4.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。
Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程。
在Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在
配置多继承。写法如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.gbgroupId>
<artifactId>parent_aartifactId>
<version>1.0-SNAPSHOTversion*>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.gbgroupId>
<artifactId>parent_bartifactId>
<version>1.0-SNAPSHOTversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>