`
buzhucele
  • 浏览: 331974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MAVEN本地中央库管理

阅读更多
Maven仓库
在以前使用Ant的时候,我们会建立一个lib目录在存放我们的jar包,比如项目所依赖的第三方包,每建立一个项目都要建立一个lib,不停的做copy工作,不仅是对于磁盘的浪费,而且也造成了版本管理上的麻烦。而且我们还需要通过提交到svn上来对lib进行管理,但是svn对于这种二进制文件的管理并不出色。

Maven仓库的初中就是为了解决这个问题,是所有常用的第三方包的集中营。这样所有的Maven项目就可以从这个仓库中获取所需要的资源,Maven仓库中对jar通过Group Id, Atifact Id, version 来管理,所以Maven项目可以很方便的进行依赖管理。你不需要自己来管理这个庞大的资源仓库,当然你可以创建一个公司层面的仓库管理器,这个我在这个章节的后面会介绍。

Maven仓库的两个概念:本地仓库和远程仓库

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml配置这个地址:
Xml代码

<settings> 
  …  
  <localRepository>D:\java\repository</localRepository> 
  …  
</settings> 

如果你想让所有的用户使用统一的配置那么你可以修改Maven主目录下的setting.xml:
${M2_HOME}/conf/setting.xml

还可以通过在运行时指定目录,但是并不推荐这么做:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
当我们创建一个简单的Maven项目后(只需要在pom.xml配置好依赖),运行mvn clean install就可以把项目构建好,不需要我们手工下载任何jar,这全靠中央仓库的存在,它会自动从仓库下载。这个仓库的定义是在${M2_HOME}/lib/maven-2.0.10-uber.jar里面。你可以在里面找到\org\apache\maven\project\pom-4.0.0.xml这个文件,在这个文件里面定义了中央仓库的地址:

<repositories> 
  <repository> 
    <id>central</id> 
    <name>Maven Repository Switchboard</name> 
    <layout>default</layout> 
    <url>http://repo1.maven.org/maven2</url> 
    <snapshots> 
      <enabled>false</enabled> 
    </snapshots> 
  </repository> 
</repositories> 

在POM中配置远程仓库

下面我介绍下如何在pom.xml里面配置远程仓库,我们需要在什么时候配置远程仓库呢?当你连接中央仓库的速度比较慢时,或者你为你的公司搭建了自己的仓库,比如Nexus仓库管理(后面我会介绍),又或者你苏需要的jar存在另外一个公共仓库,比如我们配置一个国内的镜像地址:

<project> 
…  
  <repositories> 
    <repository> 
      <id>maven-net-cn</id> 
      <name>Maven China Mirror</name> 
      <url>http://maven.net.cn/content/groups/public/</url> 
      <releases> 
        <enabled>true</enabled> 
      </releases> 
      <snapshots> 
        <enabled>false</enabled> 
      </snapshots> 
    </repository> 
  </repositories> 
  <pluginRepositories> 
    <pluginRepository> 
      <id>maven-net-cn</id> 
      <name>Maven China Mirror</name> 
      <url>http://maven.net.cn/content/groups/public/</url> 
      <releases> 
        <enabled>true</enabled> 
      </releases> 
      <snapshots> 
        <enabled>false</enabled> 
      </snapshots>      
    </pluginRepository> 
  </pluginRepositories> 
…  
</project>

这里我们可以看到,允许配置多个repository和 plugin repository,<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件,之所以不让你从这个仓库下载snapshot版本,是因为这些版本是不稳定的,但是snapshot版本在我们内部项目开发的时候可是作用巨大,后面的问文章我会讨论这个问题。至于<pluginRepositories>,这是配置Maven从什么地方下载插件构件,Maven的所有行为都是通过插件来完成的,其内部配置与<repository>类似,这里就不多说了。

尽管pom.xml中可以方便的哦配置中央仓库,但是我并不推荐大家这么做,尤其是在大的公司中,因为一个公司会有很多的项目,如果每个项目都这样配置,那么又开始做重复的copy工作了,如何解决呢,我们往下走

在settings.xml中配置远程仓库

Pom.xml的作用范围是一个项目,一个公司不可能只做一个项目,那么为了避免重复配置,那么我们需要把一些公共信息配置在setting.xml中。但是setting.xml中并不支持<repositories>及<pluginRepositories>,为了解决这个问题我们使用profile:

<settings> 
  …  
  <profiles> 
    <profile> 
      <id>myProfiel</id> 
      <!—在这里加入<repositories>及<pluginRepositories>–> 
    </profile> 
  </profiles> 
  <activeProfiles> 
    <activeProfile> myProfiel </activeProfile> 
  </activeProfiles> 
  …  
</settings> 

这里通过<activeProfile>元素来激活这个profile,这样我们就可以全局的使用这个配置,不再需要为每个POM做重复的配置了。
在实际的操作过程中,这里我们最好不要配置远程仓库,最好能够通过nexus建立公司或者组织自己的仓库,然后这把把地址指向自己的仓库,后面我会介绍为什么要这么做,怎么做。

配置镜像

如果你想覆盖中央仓库的默认地址,那么这里我们就会使用的镜像了,还在setting.xml里面配置:

<settings> 
…  
  <mirrors> 
    <mirror> 
      <id>maven-net-cn</id> 
      <name>Maven China Mirror</name> 
      <url>http://maven.net.cn/content/groups/public/</url> 
      <mirrorOf>central</mirrorOf> 
    </mirror> 
  </mirrors> 
…  
</settings> 

这里解释一下<mirrorOf>,表示只为central仓库做镜像,如果想为所有的仓库做镜像那么可以改为:<mirrorOf>*</mirrorOf>

如果你看到这里,请先不要着急,实际的项目经验告诉我,只是这些还不够,我们需要更快捷和高效的管理:

利用Nexus来构建企业级Maven仓库
Nexus简介

Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行模块间的高效依赖开发,下面会一一描述。

虽然你可以通过中央仓库来获取你所需要的jar包,但是现实往往是存在很多问题:

网速慢,你可能需要花很长的时间来下载你所需要的jar
如果你的公司很大,有几百甚至几千人再用Maven,那么这些人都去通过中央仓库来获取jar,那么这是一个很大的资源浪费
如果存在模块之间的依赖开发,你的snapshot版本是不能够被你的伙伴很方便的获取。
在实际开发过程中,有些jar的版本可能在中央仓库里面不存在,或者更新不及时,你是获取不到这个jar的。

所有以上问题,通过Nexus这个日益流行的仓库管理器可以轻松的解决。



这个仓库是本地的,下载的速度是从远程下载不可比的。
可以为你公司所有的Maven使用者服务,可以进行统一管理
后面我会介绍如何通过nexus来进行存在模块依赖的项目的开发
你可以添加自己的第三方包。


安装Nexus

我们从http://nexus.sonatype.org/downloads/ 来获取最新版本,目前最新版本为1.3.4
Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。

1)Bundle方式安装
解压nexus-webapp-1.3.4-bundle.zip 至任意目录,如D:\tools ,转到目录D:\tools\nexus-webapp-1.3.4\bin\jsw\windows-x86-32 ,运行Nexus.bat ,如果你是在linux下安装,那么就下载nexus-webapp-1.3.4-bundle.tar.gz,解压后转到${NEXUS_HOME}/ nexus-webapp-1.3.3\bin\jsw\linux-x86-32,它还支持solaris,macos等操作系统。当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明Nexus启动成功了,然后打开浏览器,访问http://127.0.0.1:8081/nexus,通过admin的帐号(admin)和密码(admin123)登录你会看到如下的页面:


如果有新版本发布,会有提示在默认页面上。
这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。

War方式安装

你可以同过war的方式以web应用的形式发布到你的应用服务器,比如tomcat。你所要做的就是下载war版本的文件,然后放到应用服务器的发布目录即可,这里就不多讲了。

到此我们已经安装好Nexus,下面我来介绍下一些我们常用的功能和使用:

配置中央仓库

先看一下界面:

在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository. 这里简单介绍下几种repository的类型:

hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

Maven central是Maven的中央仓库,点击它并选择configuration标签栏,我们会看到下面的页面:

这里有几个项目是我们可能会经常用到的:

Override local storage location: 在这个选项你可以配置你的Nexus本地仓库的存放地址,用来覆盖其默认的存放地址
Remote storage location: 这里是远程仓库的地址,为了提高代理速度,你可以修改为国内的镜像地址。默认值是http://repo1.maven.org/maven2/
Download remote indexes: 这里配置是否下载远程索引文件,模式是false, [...]
分享到:
评论

相关推荐

    maven的本地仓库jar包

    当你在开发过程中引用了一个库,Maven会尝试从中央仓库下载该库到本地仓库,以便后续的编译和构建步骤能够访问到。 本地仓库的路径通常可以在Maven的配置文件`settings.xml`中找到,默认位置在用户的主目录下`.m2\...

    maven本地仓库下载

    Maven是Java开发中广泛使用的构建工具,...总结来说,Maven本地仓库是Maven生态系统的关键部分,它存储项目依赖,提高了开发效率。通过理解其工作原理和管理方式,开发者可以更高效地利用Maven进行项目构建和依赖管理。

    maven本地仓库(常用Jar包)

    **Maven本地仓库** Maven本地仓库是Maven在本机上存储所有已下载的依赖项的地方。每次你在Maven项目中引入一个新的库,Maven都会首先在本地仓库中查找该库。如果找不到,它会去中央仓库下载。一旦下载到本地仓库,...

    maven本地仓库

    Maven本地仓库是Maven构建系统的核心组成部分,它存储着项目构建过程中所需的各种依赖库,如JAR文件和其他构建工件。Maven使用一种基于坐标(groupId、artifactId、version)的系统来管理这些依赖,使得开发者可以...

    maven及其maven本地仓库

    Maven本地仓库是每个开发者的个人存储库,用于存放从远程仓库下载的项目依赖和插件。默认情况下,Maven将本地仓库设置在用户的主目录下的`.m2`文件夹中,路径通常为`~/.m2/repository`。当项目中的POM文件声明了某个...

    spring boot 项目 + maven本地仓库

    Spring Boot 是一个基于 Spring 框架的快速开发工具,它简化了初始化、...以上就是关于Spring Boot项目与Maven本地仓库的一些关键知识点,理解并熟练运用这些概念,可以帮助开发者更高效地管理和构建Spring Boot项目。

    maven依赖本地仓库

    Maven本地仓库是Maven在本机上存储已下载依赖的默认位置。通常位于用户主目录下的`.m2\repository`目录下。当Maven在pom.xml中找到一个新的依赖时,它首先会在本地仓库查找,如果找到则直接使用,如果没有,则从远程...

    Maven 本地仓库

    在 Maven 中,仓库分为三种类型:本地仓库、远程仓库和中央仓库。本地仓库位于开发者的机器上,是 Maven 首先查找依赖的地方。 ### Maven 本地仓库的作用 1. **缓存依赖**: 当 Maven 构建项目时,它会检查本地仓库...

    自己使用的maven本地仓库2

    在“自己使用的maven本地仓库2”中,我们可以推测开发者可能在多个项目中使用了一些非标准或特定的库,这些库不在公共的Maven中央仓库中,而是被下载到这个自定义的本地仓库。这有助于减少网络延迟,提高构建速度,...

    maven本地仓库jar包

    "maven本地仓库jar包"指的是在Maven项目中使用的各种库文件,以.jar格式存储在用户的本地仓库中。本地仓库是Maven系统的一个重要组成部分,它缓存了从远程仓库下载的依赖,以便于重复使用和快速构建。 Maven使用一...

    maven的本地仓库

    在本场景中,我们有一个名为"repo"的压缩包,其内容应该是Maven本地仓库的文件结构,用于替换或扩充你的本地仓库。 在Java开发环境中,Maven本地仓库的默认路径通常是用户主目录下的`.m2\repository`文件夹。但在你...

    我的maven本地仓库1

    "我的maven本地仓库1"这个标题表明,这是一个个人维护的、用于存储Maven依赖的本地仓库,里面包含了开发者在过往项目中积累的各种jar包,方便日后开发时快速获取所需依赖,避免反复从远程中央仓库下载,提高开发效率...

    maven本地仓库资源压缩包

    标题“maven本地仓库资源压缩包”暗示了这个压缩文件包含的是与Maven本地仓库相关的资源,可能是预先下载好的依赖库,用于快速设置开发环境或者离线开发。创建Maven本地仓库非常简单,只需要在用户目录下(通常是`~/...

    Maven本地仓库.zip

    ** Maven本地仓库详解 ** ...总结来说,Maven本地仓库是项目构建过程中不可或缺的一部分,它提供了快速访问和管理依赖的能力,极大地提高了开发效率。理解和掌握本地仓库的工作原理,对于有效使用Maven至关重要。

    java-maven本地仓库包大全

    使用Maven本地仓库包大全时,开发者可以将这些JAR文件复制到自己的Maven本地仓库(`~/.m2/repository`)中,以便在项目中直接引用。这尤其适用于那些难以从中央仓库获取或者公司内部私有库的依赖。为了保持仓库的整洁...

    Android-JarsCrawler爬取阿里maven中央仓库的所有jar包

    在Android开发过程中,依赖管理是至关重要的,而Maven中央仓库是全球最广泛使用的Java库存储库之一,其中包含了大量Android开发者所需的开源库。本文将详细介绍如何使用名为JarsCrawler的工具,来爬取阿里Maven中央...

    使用nexus 搭建 maven 本地仓库

    在软件开发过程中,Maven作为Java项目管理工具,依赖于大量的第三方库,这些库通常存储在Maven中央仓库。然而,频繁地从远程仓库下载依赖可能会导致网络延迟,影响开发效率,尤其是在网络环境不稳定时。这时,使用...

    Maven本地仓库搭建工具nexus-2.11.4-01-bundle

    通过以上步骤,你就可以成功搭建起一个Maven本地仓库——Nexus 2.11.4-01,它将大大提高你的开发效率,使得依赖管理更加得心应手。同时,Nexus还提供了丰富的插件和API,允许你根据项目需求进行定制和扩展。

Global site tag (gtag.js) - Google Analytics