Maven教程-Maven仓库

Maven仓库是用于统一存储和管理构件的系统,分为本地仓库和远程仓库。本地仓库默认位于用户目录下,Maven首先查找本地构件,若未找到则从远程仓库如中央仓库或私服下载。构件可通过mvn clean install命令安装到本地仓库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式,而构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件。本篇将详细介绍Maven仓库,在了解Maven如何使用仓库之后,将能够更高效的使用Maven。

何为Maven仓库

在Maven世界中,任何一个依赖、插件或者项目构件的输出,都可以称为构件。例如依赖log4j-1.2.15.jar是一个构件,maven-compile-plugin-3.1.jar是一个构件。
在一台工作站上,可能会有几十个Maven项目,所有项目都使用maven-compile-plugin,大部分项目使用到了log4j,还有部分项目使用了Spring Framework。在每个有需要的项目中都放置一份重复的log4j或者Spring显然不是最好的解决方案,这样做不仅造成了磁盘空间的浪费,而且也难以统一管理,文件的复制等操作也会降低构件的速度。

得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础之上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(例如,编译项目的时候需要将依赖加入到classpath中),Maven会自动根据坐标找到仓库中的构件,并使用它们。

为了实现重用,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。

仓库的分类

对于Maven来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,Maven就会报错。

在这个最基本分类的基础上,还有必要介绍一些特殊的远程仓库。中央仓库是Maven核心自带的远程仓库,它包含了绝大部分开源的构件。在默认配置下,当本地仓库没有Maven需要的构件时,它就会尝试从中央仓库下载。

私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。

本地仓库

一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录,当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库中的依赖文件。

默认情况下,不过是在Windows还是Linux上,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。例如,本人的用户名为Ricky,Windows 机器上环境默认的本地仓库路径为:C:\Users\Ricky.m2\repository。

用户也可以自定义本地仓库路径,编辑$MAVEN_HOME/conf/setting.xml,设置localRepository元素值为你想要的仓库路径即可,例如:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>D:/Repository</localRepository>
</settings>


一个构件只有在本地仓库中之后,才能由其他Maven项目使用,那么构件如何进入到本地仓库中呢?最常见的是依赖Maven从远程仓库下载到本地仓库中。

还有一种常见的情况是,将本地项目的构件安装到Maven仓库中,例如,本地项目A和B,两者都无法从远程仓库获得,而同时A又依赖于B,为了能构建A,B就必须首先得以构建并安装到本地仓库中。
在项目B中执行 mvn clean install 命令,就能看到如下输出:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building demo-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ demo-api ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo-api ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ demo-api ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo-api ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo-api ---
[INFO] Building jar: F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\target\demo-api-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ demo-api ---
[INFO] Installing F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\target\demo-api-1.0-SNAPSHOT.jar to C:\Users\Ricky\.m2\repository\com\bytebeats\demo-api\1.0-SNAPSHOT\demo-api-1.0-SNAPSHOT.jar
[INFO] Installing F:\Git_Studio\NgRpc\NgRpc-samples\demo-api\pom.xml to C:\Users\Ricky\.m2\repository\com\bytebeats\demo-api\1.0-SNAPSHOT\demo-api-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.907 s
[INFO] Finished at: 2016-11-20T16:10:28+08:00
[INFO] Final Memory: 18M/180M
[INFO] ------------------------------------------------------------------------

install插件的install目标将项目的构件输出文件安装到本地仓库。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值