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这个日益流行的仓库管理器可以轻松的解决。

时间: 2024-11-05 15:56:13

Maven仓库(转载)的相关文章

创建bitbucket的私有maven仓库,把aar (library)上传到bitbucket的maven仓库(by 星空武哥)

创建bitbucket的私有maven仓库,把aar (library)上传到bitbucket的maven仓库 转载请标注原文地址:http://blog.csdn.net/lsyz0021/article/details/52065404 当我们使用android studio的开发的时候,我们可以很方面的使用compile " "命令很方便的使用别人的第三方aar库 比如我们引用okhttp的时候就可以在gradle中: dependencies { compile 'com.s

Maven仓库详解

转载自:Maven入门指南④:仓库 1 . 仓库简介 没有 Maven 时,项目用到的 .jar 文件通常需要拷贝到 /lib 目录,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难于管理.Maven 使用一个称之为仓库的目录,根据构件的坐标统一存储这些构件的唯一副本,在项目中通过依赖声明,可以方便的引用构件. 2 . 仓库的布局 构件都有唯一的坐标,Maven 根据坐标管理构件的存储.如以下对 spring-orm-3.2.0 的存储: 文件路径对应了:groupId/artifactId/

手动将jar添加到maven仓库中

?? 1.将jar放到E:\workspace\lib中.如下图: 2.编写pom.xml文件,定义jfinal的坐标. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://

Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包

转载博客:http://quicker.iteye.com/blog/2319947 有关MAVEN仓库的理解参见:http://blog.csdn.net/wanghantong/article/details/36427433 MAVEN依赖关系中Scope的作用 Java代码   Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前依赖项的作用域<scope>可以使用5个值: 在定义项目的依

[Publish AAR To Maven] 注册 Maven 仓库 sonatype.org 账户

本篇文章隶属于 <使用 Gradle 发布 AAR 到 Maven 仓库> ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:github.com/qiujuer/Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195199

[Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库

======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:github.com/qiujuer/Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/44195131 --学之开源,用于开源:初学者的心态,与君共勉! =============

在线maven 仓库

findmaven.net是一个查找Jar和查找Maven的Maven仓库搜索引擎.它能够依据Java开发人员提供的Class名或者Jar名找到包括它的Jar,同一时候提供Jar的Maven仓库链接,Maven POM,Maven依赖树,JavaDoc,Jar源码和Jar结构树. 假设您使用Maven作为项目构建工具,findmaven.net能够轻松的帮你解决NoClassDefFoundError和 ClassNotFoundException的异常错误. 近期findmaven.net站点

利用github搭建个人maven仓库

缘起 之前看到有开源项目用了github来做maven仓库,寻思自己也做一个.研究了下,记录下. 简单来说,共有三步: deploy到本地目录 把本地目录提交到gtihub上 配置github地址为仓库地址 配置local file maven仓库 deploy到本地 maven可以通过http, ftp, ssh等deploy到远程服务器,也可以deploy到本地文件系统里.例如: <distributionManagement> <repository> <id>h

N使用exus2打造企业maven仓库(三)

假设项目中,我没有使用maven,我应该做出选择,或为项目.或者用它来推动这个项目从maven.有人会问,为什么maven?无需maven我们没有很好的操作. 这里,只说两件事情我最欣赏:第一点是管理jar包.这包括太多的意义,比如下载jar包,由仓库,你仅仅须要输入包名和版本号号,马上就能够下载到你本机,而不须要到官网或google上找,假设下载速度慢,随时能够更改仓库地址. 另外.项目中jar版本号混乱也是常见的.有些隐藏的问题就是因为jar版本号引起.而且非常难发现. 还有.一个项目中n多