概念
Maven是java的一个依赖管理工具。所谓依赖就是指在Java开发过程中引入的各种jar包和第三方库,而可能这些库本省还要引用其他的库,这样我们直接引用的称为直接依赖,库的依赖称为间接依赖。如果我们手动去引入这些依赖,过程将变得十分繁琐,因此需要一个仓库Maven来为我们管理并引入这些依赖。Maven中把每个依赖包称为构件。
那么我们如何从仓库中准确的查找到每个构件呢?这就需要通过坐标来完成,maven仓库的坐标由groupId、artifactId、version三者组成。其中groupId为你的公司名称,artifactId为你的项目名,version为项目的版本号,package为所需要创建的包名。即我们在maven仓库中查找依赖时,先找到公司名groupId,再找到项目名,最后找到版本号即可唯一确定一个依赖。
maven的仓库分为本地仓库和远程仓库,本地仓库是指maven会将依赖包下载到本地的某个位置,查找依赖时先查找本地仓库,如果没找到才回到网上的远程仓库进行查找并下载。如果大家都访问maven的同一个仓库,会造成负载压力过大且访问过慢,因此maven在不同地方提供了镜像仓库供人们就近访问。
maven还提供了许多插件,我们可以使用插件很便捷地完成项目的构建、编译、打包等操作。
在maven中如果A依赖B,B依赖C,C依赖D,而A依赖E,E也依赖D,那么A会依赖关系较近E的D。如果两个依赖据A一样近,则会根据依赖解析的先后顺序进行依赖。
安装配置
安装:首先从Maven官网下载所需maven的压缩包,之后将其解压,最后将解压目录下的bin文件夹添加到PATH路径中就可以在命令行下使用mvn --v查看版本号。
配置仓库:编辑maven/conf/settings.xml文件,在<localRepository>标签中指定本地仓库的位置。
<localRepository>D:/Java/maven/repository</localRepository>
添加国内镜像源:从国内镜像源下载依赖比直接使用默认下载源更快,在<mirros>标签内如下配置为阿里云的镜像源
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public </url>
</mirror>
</mirrors>
创建项目
maven常用的命令如下:
mvn -compile |
编译项目
扫描二维码关注公众号,回复:
10959678 查看本文章
|
mvn -test |
测试项目 |
mvn -package |
打包项目 |
mvn -install |
安装jar包到本地仓库 |
mvn -clean |
删除编译好的目标文件 |
通过archetype插件创建项目:在命令行输入mvn archetype:generate会开始自动创建maven项目,如下所示会提示选择要创建的maven类型编号、并输入groupId、artifactId、version、package等内容。
也可以在一条命令行中指定 groupId、artifactId、version、package等内容
mvn archetype:generate -DgroupId=com.tory -DartifactId=spring-mvc-study -DarchetypeArtifactId=maven-archetype-webapp
最后使用jetty容器运行项目:mvn jetty:run ,注意需要在pom中引入jetty插件,当然也可以引入Tomcat插件在该容器中运行项目。
在IntelliJ IDEA中创建Maven项目更为简便,首先在IDEA中配置maven:在IDEA中打开->File | Settings | Build, Execution, Deployment | Build Tools | Maven对如下三个选项栏进行配置,分别对应maven的安装目录,配置文件及仓库的目录
接着创建一个Maven项目,点击 File | New | Project弹出如下界面,选择maven类型并点击Next。如果需要创建模板可以勾选create from archetype并选择所需模板
接下来设置项目名称与位置,并且设置GroupId、ArtifactId、Version信息
最后选择maven的信息,点击Finish创建完成
pom.xml文件
POM是项目对象模型(Project Object Model)的简称,创建好maven项目后会在根目录下生成pom.xml文件对依赖进行管理。如下所示,
首先<modelVersion>指定了POM的版本。
<groupId>、<artifactId>、<version>分别指定了项目的三个坐标,groupId通常由“公司名.项目名”构成,artifactId由“项目-模块名”构成。version一般由三位数字,第一个数字代表大版本号,第二个数字代表分支版本号,第三个数字代表小版本号。后面的Snapshot代表快照版本,alpha代表内测版本,beta代表公测版本,RC(Release Candidate)发行前最后的候选版本,release代表稳定版本,GA(General Availability)正式发布版。
<packaging>指定项目的打包方式,默认为jar包
<name>代表项目的名字,<url>为项目的网址
<dependencies>中通过坐标的方式引入项目需要的具体依赖。<scope>代表依赖使用的范围,这里为test代表只能在test中使用该依赖。默认为compile,在编译、测试、运行都有效,provided在编译、测试有效,runtime在厕所、运行有效。还可以使用<exclusion>标签来排除引用依赖的传递依赖,比如A依赖B,B依赖C,在A中引入B依赖时不希望引用C,这时就可以使用exclusion排除C。
<build>下引入所使用的maven插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--指定POM版本-->
<modelVersion>4.0.0</modelVersion>
<!--项目的maven坐标-->
<groupId>org.example</groupId>
<artifactId>SpringMVC</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringMVC Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--项目所需依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--所用maven插件-->
<build>
<finalName>SpringMVC</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
pom的依赖可以进行继承,例如在父类项目的pom的<dependencyManagement>中引入了junit依赖如下,则在子项目依赖了父项目之后就可以继承junit而不需要再次引入。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>