Maven学习笔记之——仓库(上)

Maven学习笔记之——仓库(上)

1、    何为maven仓库

Maven可以在某一指定位置统一存放所有maven项目共享的构件、此指定位置就是maven仓库。实际的项目将不再自己存放其所依赖的构件、他们只需要声明这些依赖的坐标、在需要的时候就会自动根据坐标找到仓库中的构件、并使用他们。

仓库的意义:减少磁盘占用空间、去除大量重复的构件、尤其是项目越来越多、越来越大的时候。更便于统一管理所有控件。

2、    仓库的布局

任何一个构件都有其唯一的坐标、根据这个坐标可以定义其在仓库中的唯一存储路径、这便是maven的仓库布局方式。

如org.andy.items:thikinjava:1.0是thikinjava-1.0.jar构件的坐标、则对应与存放在maven仓库中的目录就是:org/andy/items/thikinjava/1.0/thikinjava-1.0.jar。如果构件有classifier、就加上构件分隔符和classifier。假如上面例子的classifier是jdk1.6、则在仓库中的路径变为:org/andy/items/thikinjava/1.0/jdk1.6/thikinjava-1.0-jdk1.6.jar。

3、    仓库的分类

Maven中只有两类仓库:本地仓库和远程仓库。本地仓库就是搭建maven时指定或者默认的存放maven构件的文件夹(maven仓库使用的是简单的文件系统)。而远程仓库是存在与互联网上的外部仓库。

Maven项目中指定了构件的坐标之后、在使用时其会自动寻找、首先在本地仓库中查找、存在则使用、不存在则去指定或者默认的远程仓库(Maven的默认配置中指定的远程仓库是中央仓库)查找、存在、则下载到本地仓库再使用、不存在则报错。

私服是一种特殊的远程仓库、搭建在局域网内、用其代理所有外部的远程仓库、内部的项目还能部署到私服上供其他项目使用。

3.1    本地仓库

一般情况下、maven项目中没有lib这种用于存放依赖文件的目录、当maven在执行编译或者测试的时候、如果有需要使用的依赖文件、他自动的基于坐标使用本地仓库的依赖文件。

Maven中所有的设置都放在%M2_HOME/conf/settings.xml文件中。每个用户应该拥有自己的settings.xml文件、将%M2_HOME/conf/settings.xml复制到~/.m2/settings.xml下、然后修改自己的maven配置文件。好的习惯是好的开始、为自己、为团队减少不必要的麻烦。本地仓库如果不指定则默认放在${user.home}/.m2/repository。当然可以指定自己电脑上的任意位置、如D:\maven\repository\文件夹下、修改settings.xml文件。

            <localRepository>
                    D:\maven\repository             </localRepository>

远程仓库中的构建要下载到本地仓库才能使用、本地自己使用的项目可以通过maven的命令安装到本地仓库中、maven常用的命令都是通过插件来执行的。常用命令——测试:test、编译:compile、清理:clean、安装:install、发布:deploy、打包:package等。

3.2    远程仓库

存在与互联网上用于提供构件。前面提到过、要使用某个构件时、就会先到本地仓库寻找、没有的话再从远程仓库寻找、找到就下载到本地仓库然后使用。本地仓库和远程仓库之间的关系就好比是自己的书房和网上书店的关系、自己想看的书先从书房找、没有的话从网上淘一本放到自己的书房看、自己的书房最需要一个就够了、而网上书店可以有很多、同样本地仓库只有一个、而远程仓库就可以有很多。我们可以在settings.xml中指定远程仓库。

3.3    中央仓库

Maven默认的远程仓库、供于我们没有手动设置的时候使用。这些我们从maven的settings.xml是看不到的。Maven有的POM具有继承性、所有的maven项目都会继承一个超级POM、这个超级POM在%M2_HOME/lib/maven-model-builder-3.2.3.jar(版本不同、后面的数据有可能不同)中、关于仓库Repository的一段配置:

    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>

中央仓库URL:http://search.maven.org/#browse ; id 中央仓库唯一标识。URL中央仓库访问地址。Layout:使用仓库默认布局(前面有提到).snapshots:不使用快照版本、也就是不稳定版本。

4、    私服

私服是一种特殊的远程仓库、是架设在局域网内的仓库服务、私服代理广域网上的远程仓库供maven用户使用、当maven需要下载构件时、它从私服请求、如果私服上没有则从远程仓库中下载、缓存到私服上之后、再为maven的下载请求提供服务。一些无法从远程仓库下载的构件、比如我们自己生成的构件也可以放在私服上供别人使用。

好处:

节省自己的宽带。

加速maven构建——不停的连接外部仓库很耗时、但是maven内部的机制要求maven在执行构建的时候不停地检测远程仓库数据。因此、当项目中配置了很多外部远程仓库的时候、构建速度大大降低、使用私服之后、当maven构建是只需要检测局域网内私服的数据的时候、构建速度能得到很大的提升。

部署第三方构件——主要是用于第三方构件不能从远程仓库中获取的时候、比如我们自己开发的模块供别人使用、Oracle的JDBC数据库连接驱动因为版权问题不能发布到公共仓库。建立私服之后、就可以把这些构建部署到私服中去、供内部的maven项目使用。

提高稳定性、增强控制——Maven构建高度依赖与远程仓库、当Internet不稳定的时候、Maven项目的构建也变了很不稳定甚至无法构建、使用私服有、私服中缓存了大量的构件供Maven构建的时候使用、此外有些私服提供了额外的服务供我们使用、如权限管理、RELEASE、SNAPSHOT分区等。

降低中央仓库的负荷——建立私服后、当需要新的构件的时候、私服只需要访问一次中央仓库、把构件缓存到私服上、这样使用这个私服的所有成员只需要从私服上下载构件到本地就可以使用、不再连接到中央仓库重复下载。

时间: 2024-10-13 12:29:51

Maven学习笔记之——仓库(上)的相关文章

Maven学习笔记之——仓库(中)

Maven学习笔记之--仓库(中) 1.    远程仓库的配置 当出现默认的中央仓库无法满足我们的需求或者连接不上的时候.我们可以通过POM文件来指定远程仓库. <repositories> <repository> <id>jboss-maven2-release-repository</id> <name>JBoss Repository</name> <url>http://repository.jboss.org/

Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到具体的构件.Maven的坐标元素包括groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.需要时Maven会根据坐标到其中下载.具体关于中央仓库的介绍在后面. 2.    Maven坐标详解 比如下面一组坐标: <groupId>org.andy.items</groupId> &l

Maven学习笔记(二):Maven仓库

Maven仓库的知识点比较少,理解起来也很简单. 仓库只有两类:本地仓库和远程仓库.所谓本地仓库就是自己机器上的仓库,在setting.xml文件中进行配置: 1 <localRepository>E:/MavenStore</localRepository> 本地仓库中存储的就是在使用Maven解析项目时从远程仓库下载的依赖和自己安装的一些构建. 远程仓库很明显就是网络上的仓库,存储在一个神秘的地方(好吧,其实我是不知道在哪里).当Maven解析项目时,如果本地没有需要的依赖,就

Maven学习笔记之——坐标和依赖(下)

Maven学习笔记之--坐标和依赖(下) 1.    最佳实践 归纳Maven依赖使用的常用技巧.方便用来避免和处理很多常见问题. 1.1.     排除依赖 传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理.但是有些时候这种特性也会带来问题.例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目.这时候需要排除掉该SNAPSH

Maven学习笔记之——三套生命周期

Maven学习笔记之--三套生命周期 Maven命令的输入往往就对应了生命周期.比如mvncompile就表示执行默认生命周期阶段compile.Maven的生命周期是抽象的.其实际行为都是由插件完成的.比如mvncompile就可能会由maven-compile-plugin完成.生命周期和插件是协同工作. 1.    何为生命周期 项目构件中进行的清理.编译.测试及部署都可以视作一个一个项目的生命周期.但是每个项目每个人都有不一样的顺序不一样的实现方式.没有统一性带来的不方便已经不言而喻.

Maven学习笔记之——坐标和依赖(中)

Maven学习笔记之--坐标和依赖(中) 1.    传递性依赖 1.1    何为传递性依赖 项目中经常有引入一个jar包还要引入其他与其相关的jar包.自己搜的话要注意很多.比如版本问题等.而Maven会解析解析各个直接依赖的POM.将哪些必要的间接依赖以传递依赖的形式引入到项目中. 依赖范围不仅可以控制依赖与三种classpath关系.还对传递依赖产生影响. 假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖.第一直接依赖的范围和第二直接依赖

Git 学习笔记&lt;远程仓库与标签管理&gt; (四)

什么是远程仓库? 就像第一章介绍的那样,远程仓库可以储存你编写的所有源码和资源文件. 甚至也可以当网盘使,不过当然有很多契合git管理文本的特性. 下面就要以 github 为示例远程仓库进行介绍.  (也可以自己弄一台服务器作远程仓库). 创建仓库 在主页找到 +New repository 或者右上角的加号里有.输入名字 描述 然后没钱只能public就能确定了.然后呢,点名字打开你的仓库.(主页右下角可以找到) 关于与远程仓库的连接 首先你打开你的保险箱得先证明身份吧,不然我怎么知道你是客

Maven学习笔记(1)之安装Maven

此笔记是学习Maven时自己摸索+各种百度而来,并非全部原创,望与各位一同学习,勿拍~勿拍~ 安装步骤: 1.下载Maven的最新版本,地址:http://maven.apache.org/download.cgi 2.将下载完成的压缩包放至D盘根目录(图方便,一会儿安装完再删就好) 3.在命令行上操作,进入到你想要安装的目录路径后敲:jar xvf 的命令来进行解压安装(请勿手动解压以省略此步) 4.配置环境变量 新建系统变量  MAVEN_HOME  变量值:D:\Java\apache-m

Maven学习笔记-使用Eclipse插件创建Java Webapp项目

使用Java的猿们,最多接触的大概就是web项目了吧?在学习Maven的过程中,首先当然就是创建一个webapp项目. 自己在尝试的过程中,碰到了很多的问题.我把详细的过程都记录下来,用以今后参考. 步骤: 如果未搭建好Maven开发环境,请参考前一篇:Maven学习笔记--环境搭建 打开Eclipse, 菜单栏选择File -> new -> other,在弹出的对话框中找到Maven Project. 在弹出的新建Maven项目的对话框中,不要勾选第一项"Create a sim