1. maven的依赖管理
- maven的依赖管理,就是管理jar包的过程
- 在没有使用Maven时,每个项目的jar包都需要粘贴到lib目录下,可能有几十个,几百个,导致项目工程文件庞大。试想如果我们只需要保存核心代码部分,项目工程文件就会大大减小,maven的依赖管理就可以解决这个问题。
- maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文 件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从 而找到这些 jar 包,再把这些 jar 包拿去运行。
1.1 jar包的坐标由什么组成?- Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,他们是groupId、artifactId、version、packaging、classifier。先看一组坐标定义,如下:
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>
groupId:该元素定义了当前Maven项目隶属的实际项目,一般情况下该项元素都与公司域名相对应,比如com.taobao.
artifactId:该元素定义了实际项目中的一个Maven Module
version:该元素表示当前构件的版本,包括稳定(release)版本和测试(snapshot)版本
packaging:该元素定义Maven项目的打包方式,默认为jar,还有war和pom方式
-
GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
-
GroupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的GroupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,ArtifactId是tomcat。
-
比如我创建一个项目,我一般会将GroupId设置为cn.pzh,cn表示域为中国,pzh是我个人姓名缩写,ArtifactId设置为testProj,表示你这个项目的名称是testProj,如果是web项目 packaging需要选择war包来打包
2、maven 仓库和仓库的类型有哪些?
-
maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A、项目 B 等都会通过 maven
软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在本地仓库,本地仓库 就是本地文 件夹,当第二次需要此 jar
包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库 理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下图描述了 maven 中仓库的类型: -
本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找 默认本地仓库位置在 u s e r . d i r / . m 2 / r e p o s i t o r y , {user.dir}/.m2/repository, user.dir/.m2/repository,{user.dir}表示windows 用户目录。
-
远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。 远程仓库可以在互联网内也可以在局域网内。
-
中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件
3. 怎么修改本地仓库的路径?
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
<localRepository>D:\Download\maven_repository</localRepository>
在maven的config目录中,setting.xml中把Default注释,写上本地仓库的路径即可<localRepository>D:\Download\maven_repository</localRepository>
比如说我的本地仓库在 D:\Download\maven_repository
4. 全局 setting 与用户 setting
- maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。 在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project 项目,它作为 maven 的全局配置。 如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在: u s e r . d i r / . m 2 / s e t t i n g s . x m l 目 录 中 , {user.dir} /.m2/settings.xml 目录中, user.dir/.m2/settings.xml目录中,{user.dir} 指windows 中的用户目录。 maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
5. maven的基本命令
- mvn clear
- clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
- mvn compile
- maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target 目录下。
- mvn test
- test 是 maven 工程的测试命令 mvn test,会执行src/test/java下的单元测试类。
- mvn package
- package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于web 工程打成war 包。
- mvn install
- install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库
deploy > install > package > test > complie
当前面的命令执行后,后面的命令也会随之执行
6. maven的概念模型
- maven包含了一个项目对象模型(project object model),一组标准集合,一个项目生命周期(project lifecycle),一个依赖管理系统(dependency management system)和用来运行定义在生命周期阶段中插件目标逻辑。
- 项目对象模型 pom.xml
- 一个maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标,项目依赖,项目的信息,插件信息等。
- 依赖管理模型
- 通过项目对象模型确定了项目的信息,通过依赖管理模型确定的项目依赖的插件及JAR包,如下图所示
总结,maven具有依赖管理和一键构建的功能,优点有
①防止jar包冲入
②简化了项目从编译、测试、运行、打包、安装 ,部署的流程
好啦,这就是我对maven基础知识的梳理。如有错误,还望指正!!!