在开始之前,请先确保你的电脑已经安装了jdk1.7或者以上版本,maven,以及IDEA或者eclipse
推荐教程:
JDK安装以及环境变量的配置
Maven环境配置以及IDEA使用maven创建项目
Maven官网:https://maven.apache.org/
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
在没学习maven之前,如果你学过spring框架或者其他框架的时候,是不是通常得手动复制一大堆jar包到项目中。随着我们项目的不断扩大,模块越来越多,引入的jar也随之增多。这时候管理这些依赖就是一件很让人头疼的时,不同的jar包之间可能存在冲突或者版本之间不匹配等各种各样的问题。
而使用maven的话,我们可以事先将各种jar包放到一个仓库中,当项目中需要中使用的时候,只要通过pom.xml
中的做表,到我们事先存放jar包的仓库中找到这些jar包,再用这些jar包去运行即可。
我们也可以通过pom.xml
中的坐标去管理各个依赖之间的关系(这个后面会详细提到)。
一个项目中,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
maven可以帮我们管理这一系列过程。通过maven提供的命令就可以轻松搞定。
提高开发效率。
现在开源的项目或者很多教程,都会使用到maven,不学的话,很难看懂别人的代码。
首先我们先使用idea创建一个maven工程(不知道怎么创建的话可以参考这里Maven环境配置以及IDEA使用maven创建项目)。
创建好后,会得到这么个一个目录
pom.xml:maven 项目核心配置文件。
src/main目录下就是存放跟我们项目相关的文件
*.java
文件。*.java
文件。target:项目输出位置,编译好的.class
文件会输出到这里
如果是一个javaweb项目,在src/main目录下还会有一个webapp目录,用于放置网页文件等
创建好maven工程后,打开pom文件,一般会出现以下内容。(idea上不同方式创建,多少会有些不同)
Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
项目对象模型
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、
插件目标等;例如定义自己项目中的一些信息。
<groupId>org.examplegroupId>
<artifactId>testartifactId>
<version>1.0-SNAPSHOTversion>
依赖管理系统
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9
的依赖定义:
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
一个项目生命周期(Project Lifecycle)
使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期。
插件(plugin)目标(goal)
maven 管理项目生命周期过程都是基于插件完成的。
这里记录下常用的标签用法,若有缺漏,欢迎评论区留言,我看到了会及时补上。
可以先看之后的内容,再回过头来看这部分。
描述这个pom文件遵循哪个版本的项目描述符
<modelVersion>4.0.0modelVersion>
父级依赖,继承哪个pom项目
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.4.2version>
<relativePath/>
parent>
<groupId>org.examplegroupId>
<artifactId>testartifactId>
<version>1.0-SNAPSHOTversion>
定义项目的打包方法。可选值有:pom、jar、war、maven-plugin
<packaging>jarpackaging>
在properties可以自定义一些属性值
<properties>
<junit.version>4.13junit.version>
properties>
使用的方法如下
<properties>
<junit.version>4.13junit.version>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit.version}version>
<scope>testscope>
dependency>
dependencies>
如果要查询某些依赖作标,可以到这个网站上http://www.mvnrepository.com/
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
当某个依赖重复导入时,可以用exclusions排除项目中的某个依赖。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>junitgroupId>
<artifactId>junitartifactId>
exclusion>
exclusions>
dependency>
依赖范围有四种
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
在父工程中使用。如果在子工程中没有定义依赖版本,就默认使用父工程这里定义的。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
dependencies>
dependencyManagement>
maven项目运行的时候会通过pom.xml文件中的依赖作标引入一些依赖jar包,首先会现到本地区寻找,如果有的话,则直接引入,若没有的话,则从远程仓库下载(联网下载),然后保存到本地,之后再使用的话,直接引用本地的就行。
maven仓库分为三类:
${user.dir}/.m2/repository
,${user.dir}
也就是window用户目录。这个可以通过修改maven/conf下的settings.xml文件来设置。compile是maven工程的编译命令。可以把src/main/java中的java文件编译成class文件输出到targe目录下。使用方法如下图
test是maven工程的测试命令,会执行src/test/java下的单元测试类。
使用方法如下。
clean是maven工程的清除命令,执行后会删除targe目录
package是maven工程的打包命令,根据\
的内容打包成jar包或者war包。
mvn package
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
mvn install
maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,
这三套生命周期分别是:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
maven指令有以下这些,当执行某个指令后,会把它之前的指令也执行一次。例如执行test指令的话,也会执行clean、compile。
现在项目中加入父标签
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.4.2version>
<relativePath/>
parent>
然后加入spring-boot-starter-web坐标
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
然后使用idea的工具来查看下项目的依赖结构
会发现除了引入的spring-boot-starter-web
之外,还有其他jar包存在。因为我们项目依赖了spring-boot-starter-web
,而spring-boot-starter-web
也以来了tomcat
、spring-webmvc
等。所以它们也出现在了我们项目中。这就是传递依赖。
依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。
因为依赖传递等原因把某一个jar包的不同版本都引入到了项目中。我们可以选择保留某一版本的依赖。使用
到此,本文就此结束。希望能帮助你快速了解并使用maven。
拒绝白嫖,从点一键三连做起。