在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。
实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(例如,编译项目的时候需要将依赖加入到classpath中),Maven会自动根据坐标找到仓库中的构件,并使用它们。
为了实现重用,项目构建完毕后可生成的构件也可以安装或者部署到仓库中,供其他项目使用。
任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式。该路经与坐标对应关系为groupId/artifactId/version/artifactId-version.packaging。
举个例子,比如下面这个分页插件依赖如下:
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.0</version></dependency>那他对应的仓库的路径就是这样:

Maven仓库是基于简单文件系统存储的,我们也理解其存储方式、因此,当遇到一些与仓库相关的问题时,可以很方便的查找相关文件,方便定位问题。

本地仓库 一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
默认情况下,不管在Window还是Linux下,每个用户在自己用户目录下都有一个路径名为.m2/repository/的仓库目录。
如果你想自定义本地仓库目录地址。你可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址,例如:
<settings> <localRepository>D:\java\repository\</localRepository></settings>这样,该用户的本地仓库地址就被设置成了 D:\java\repository\。
需要注意的是,默认情况下,~/.m2/settings.xml文件不存在,用户需要从Maven安装目录复制$M2_HOME/conf/settings.xml文件再进行编辑。
远程仓库-中央仓库 由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。
中央仓库包含了这个世界上绝大多数流行的开源Java构件,以及源码、作者信息、SCM,信息、许可证信息等,每个月这里都会接受全世界Java程序员大概1亿次的访问,它对全世界Java开发者的贡献由此可见一斑。
远程仓库-私服 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。因此,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。
私服的好处:
三者之间的关系是,当我们在项目中依赖一个jar包时,Maven程序会先去本地仓库中找,如果没找到就回去私服找,如果还是没有,最后就回去中央仓库找。其过程如下图:

如果从仓库类型上分,则分为 release发布仓库 和 snapshot快照仓库
<version>版本号</version>)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本如果是快照版本: 在mvn deploy时会自动发布到快照版本库中。而使用快照版本的模块,在不更改版本号的情况下直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本: 那么在mvn deploy时会自动发布到正式版本库中。而使用正式版本的模块在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载。
mvn在上传jar包到私服和正常构建进行依赖下载时,都会在本地存一份。快照版本包适合在测试或者UAT环境中使用,用于快速迭代,不用改版本号一直对同版本的jar包进行修改。正式包适合shengchan生产环境,每次jar包功能变更都要打版本号。
mvn clean
表示运行清理操作(会默认把target文件夹中的数据清理)
mvn clean compile
表示先运行清理之后运行编译,会将代码编译到target文件夹中
mvn clean test
运行清理和测试
mvn clean package
package命令完成了项目编译 单元测试 打包功能,但没有把打包的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库
mvn clean install
isntall命令完成了项目编译 单元测试 打包功能,同时把打包的可执行jar包(war包或其它形式的包)部署到本地maven仓库,但没有部署到远程maven私服仓库
mvn clean deploy
deploy命令完成了项目编译 单元测试 打包功能,同时把打包的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库
上面的命令大部分都是连写的,大家也可以拆分分别执行,这是活的,看个人喜好以及使用需求,Eclipse Run as对maven项目会提供常用的命令
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。
作用范围是局部,每个项目构建都要有个属于那个项目的pom.xml
在Maven中,当谈到Project的时候,不仅仅是一堆包含代码的文件。一个Project往往包含一个配置文件,包括了与开发者有关的,缺陷跟踪系统,组织与许可,项目的URL,项目依赖,以及其他。
它包含了所有与这个项目相关的东西。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;
而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。