首页 > 程序开发 > 综合编程 > 其他综合 >

maven基础篇(6)-maven仓库

2016-05-20

maven仓库,就是指存放包括依赖,插件和项目等一切maven构件的简单文件系统。特别注意,是文件系统。也就是每一个构件在其中都是以文件的方式存在,并且构件存放的规则是按照maven坐标的方式,一般为groupId artifactId version artifactId-version(-classifier) packaging

一,maven仓库

maven仓库,就是指存放包括依赖,插件和项目等一切maven构件的简单文件系统。特别注意,是文件系统。也就是每一个构件在其中都是以文件的方式存在,并且构件存放的规则是按照maven坐标的方式,一般为groupId/artifactId/version/artifactId-version(-classifier).packaging的方式。按照这样的方式,你可以进入仓库去查找某个依赖看看究竟是不是这样。另外,maven对依赖的解析也是按照maven坐标去构建这个路径去寻找的,这也强调了maven世界,构件的坐标是多么重要。在此,我进入我的本地仓库看看:
这里写图片描述

maven仓库共分为两种,本地仓库,远程仓库。而远程仓库又分为私服,中央仓库和其他仓库<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPqGjyc/D5su1uf2jrG1hdmVu0bDV0rm5vP7Kx7j5vt1tYXZlbtf4seq5ub2owre+tsil0bDV0rXEo6zK18/Iu+G9+MjrztLDx7G+tdi1xLLWv+LIpdGw1dKho8jnufuxvrXYsta/4sO709CjrLvy1d/Q6NKq1eK49rm5vP64/NDCtcSw5rG+o6zU8srHwarN+Mil1LazzLLWv+KjqMSsyM/Ipc6q1tDR67LWv+KjqdGw1dKho9Ta1LazzLLWv+LRsNXS0sC+ycrHwPvTw21hdmVu1/ix6rm5vai5ubz+wre+tsC00bDV0rXEoaPI57n71dK1vcHL1PLPwtTYu/K4/NDCvfixvrXYsta/4qOst7TWrtXSsru1vdTysahtYXZlbrTtzvOhozxiciAvPg0K1tDR67LWv+KyorK7sPzAqM7Sw8e/qreiy/nQ6LXEyKuyv7m5vP6jrMv50tTG5Mv7sta/4rHIyOdKQm9zcyBNYXZlbr/itci+zcrHzOG5qbK5s+TX99PDtcSho9XiuPbG5Mv7tcTUtrPMsta/4ra8v8nS1NaxvdO9+NDQxeTWw7XEoaPB7c3iz9bU2sbz0rW/qreitry74dTa19S8urXEvtbT8s34vajBotfUvLrLvdPQtcSy1r/it/7O8cb3o6zSsry0y723/qGjvajBosu9t/7T0NbutuC6w7Smo7oxo6y92sqhzeLN+LT4v+2jrLK7sdjDv7TOtrzBrM3izfjPwtTYubm8/qO7MqOsvNPL2W1hdmVuubm9qKOssrux2MO/tM7BrL3TzeLN+KOo1rG909TavtbT8s34way908u9t/6jqbj80MK78s/C1Ni5ubz+o6htYXZlbrLlvP64/NDCu/rWxrvhtqjKsbj80MKjqaO7M6Ossr/K8NK70KnO3reo1NrUtrPMsta/4rK/yvC1xLXayP23vbm5vP678tXfz+7Ev8rks/ajrLmpxNqyv8/uxL/KudPDo7s0o6zTydPaway908u9t/7Kx9PDtcS+1tPyzfijrNK7t73D5m1hdmVuubm9qLj8zsi2qKOswe3Su7e9w+a63Lbgy723/r/J0tS9+NDQyMvOqrXEv9jWxqO7NaOsvPXJ2dbQ0euy1r/itcS437fDzsq4urrJoaM8L3A+DQo8aHIgLz4NCjxoMiBpZD0="二几种仓库">二,几种仓库

1,本地仓库配置
本地仓库在没运行maven命令之前并不存在。当第一次运行maven命令时,在windows系统maven会创建本地仓库,默认地址为:C:\Users{你的用户名}.m2\repository。本地仓库会从远程仓库下载很多的构件,放在系统盘会影响电脑的运行速度等,还有可能系统盘的空间不够大。一般,我们会修改maven默认的本地仓库位置。在此,我把我的本地仓库修改情况如下:
修改{你的maven解压根目录}\conf\settings.xml,如下:
这里写图片描述

特别注意:不建议修改{你的maven解压根目录}\conf\settings.xml这个位置的全局配置文件,因为这个是默认的全局配置文件。如果你修改了这个位置的全局配置文件,并且你的电脑是多个用户使用,这个位置的配置会对别的用户也产生影响。最好的方式,是把{你的maven解压根目录}\conf\settings.xml这个默认位置的全局配置文件复制一份放在别的文件夹下,然后你用IDE集成工具开发时指定使用这个新位置的配置文件。如下:
这里写图片描述

2,中央仓库
如下图打开maven的pom-4.0.0.xml,可以看到中央仓库配置为maven的默认远程仓库,。
这里写图片描述
这里写图片描述

特别注意,这个pom-4.0.0.xml是超级pom,你项目中的所有pom都会继承这个pom。这个超级pom描述了构建maven项目的基本情况以及必须插件,这也是为什么你在你的pom中不做任何配置(除了项目坐标)都可以自动生成一个maven项目的原因。更详细的情况,在以后学习时再做总结。如下:



  4.0.0

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
    
  

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
      
        never
      
    
  

  
    ${project.basedir}/target
    ${project.build.directory}/classes
    ${project.artifactId}-${project.version}
    ${project.build.directory}/test-classes
    ${project.basedir}/src/main/java
    <scriptsourcedirectory>${project.basedir}/src/main/scripts</scriptsourcedirectory>
    ${project.basedir}/src/test/java
    
      
        ${project.basedir}/src/main/resources
      
    
    
      
        ${project.basedir}/src/test/resources
      
    
    
      
        
          maven-antrun-plugin
          1.3
        
        
          maven-assembly-plugin
          2.2-beta-5
        
        
          maven-dependency-plugin
          2.8
        
        
          maven-release-plugin
          2.3.2
        
      
    
  

  
    ${project.build.directory}/site
  

  
    
      release-profile

      
        
          performRelease
          true
        
      

      
        
          
            true
            maven-source-plugin
            
              
                attach-sources
                
                  jar
                
              
            
          
          
            true
            maven-javadoc-plugin
            
              
                attach-javadocs
                
                  jar
                
              
            
          
          
            true
            maven-deploy-plugin
            
              true
            
          
        
      
    
  

3,私服
在局域网上搭建私服,对外网的远程仓库进行代理。那么当maven在本地仓库找不到时,就会先到私服上去找。如果私服上没有那个构件,则再转到外网的远程仓库上去找。找到后先下载缓存进私服,再对maven本地项目提供下载服务。本地的项目输出也可以部署到私服上。借用书上的一张图:
这里写图片描述


三,远程其他仓库的配置

中央仓库并没有包括全部的构件,有时我们的项目所需的一些构件来源于第三方maven库,那么我们就需要对其他远程仓库(包括Jboss maven库等的其他远程仓库和私服)进行配置。

1,远程其他仓库的配置和认证
在本地项目的pom.xml中进行其他仓库的配置,这里以配置jboss maven库为例,如下:


        
            jboss
            JBoss Repository
            http://repository.jboss.com/maven2
            
                true
            
            
                true
                daily
                ignore
            
        
   

如上面注释,id应该是唯一的,不应该和别的远程仓库id相同。假如这里的id改成中央仓库的id,那么这个jboss仓库就会覆盖掉中央仓库。前面已经浅显的提到过,配置了 中央仓库的maven超级pom会被当前项目的pom继承,如果id相同的仓库配置子pom则会覆盖父pom。url制定了配置的远程仓库的地址。releases指定的是本项目对远程仓库发布版本构件的下载支持配置情况。snapshots指定的是本项目对远程仓库快照版本构件的下载支持配置。snapshots和releases都有enabled,updatePolicy和checksumPolicy这三个子元素。enabled指定对某种版本构件下载是否支持。updatePolicy指定的是本项目中下载的这个远程仓库的构件从远程仓库的更新周期。每个构件再被部署到仓库时,都会同时部署对应的校验文件,checksumPolicy指定当本地项目从远程仓库下载构件时的校验策略,其中ignore指完全忽略校验和错误。

已经配置了其他远程仓库,一般这样我们就可以访问这个远程仓库了。但是有时候出于安全考虑,有些远程仓库或者我们自己搭建的私服是需要输入用户名和密码这些认证消息才能够访问的。那么我们在本地怎么配置认证消息呢?《Maven实战》上说这个认证配置信息一般放在settings.xml而不是配置在pom.xml中,因为pom会被提交到代码库供所有成员访问。这个解释其实我是真的不理解的,现在只是在学maven并没有多少利用maven开发的经验。所以,请明白的告诉我,可好? 凭借我某次和别人一起开发的经验,我还是要强行解释一波,如果有错,请指教!很多时候,一些企业项目都是团队一起开发,用svn进行版本控制,我们通常是把项目分很多模块给每个人开发,开发的过程会经常上传自己的代码和从服务器下载更新自己的代码。那么这个项目中的代码和pom.xml是大家共享的,谁都有可能会去修改pom.xml中的一些配置。所以是不是因为这个会不安全,会当我更新时影响我对我在pom.xml配置的远程仓库的访问?修改本地我的maven中的settings.xml只有我自己独享,这样更安全。我只能这样理解啦,望指教!!!在settings.xml配置远程服务器认证情况如下:
这里写图片描述

特别注意,在pom.xml配置的远程服务器id一定要和在settings.xml中配置的远程服务器认证消息id一样!!!不然,你懂的相当于没有对那个需要认证的远程服务器配置验证消息。

2,把项目或第三方构件部署到私服

其他远程服务器的配置和认证上文都已经学了,这里再配置私服和认证私服应该就都会了吧。我们也经常把我们的项目输出和一些中央仓库或者其他远程仓库没有的构件部署到私服,供我们所有项目组成员使用。我们可以利用maven的一个命令mvn clean deploy把我们的项目输出部署到私服的发布版本仓库或者快照版本仓库,具体发布到哪种仓库是根据我们在当前项目的pom.xml中配置的项目坐标中的version决定的。但是前提我们必须得在pom.xml做一些配置,因为运用这个maven命令,maven会去当前项目 的pom.xml读取部署的位置,。如果不对私服进行部署配置,那么maven就会根据超级pom-4.0.0.xml默认部署到本地指定文件夹。当前项目的pom.xml配置部署私服的实例如下,其中的一些配置说明已在代码中注释。

   
        
            proj-releases
            Proj Release Repository 
            http://192.168.1.100/content/repositories/proj-releases
        
        
            proj-snapshots
            Proj Snapshot Repository 
            http://192.168.1.100/content/repositories/proj-snapshots
        
   

3,“快照版本”的理解

构件的版本,分为发布版本和快照版本。发布版本,表示稳定版本,对这个版本不会再做修改或变动。举例,发布版本的命名一般为1.0,2.0.0或3.1-alpha-2这样的。总之发布版本的名字中不含时间的成分。而快照版本则为不稳定版本,很有可能还在修改中或者未完成中。快照版本的命名一般为2.1-SNAPSHOT或者2.1-20191109.221412-13这样的。即快照版本一般命名中含SNAPSHOT或者具体时间和快照次数(例如,20191109.221412-13)。
加入这个快照版本的概念,旨在保证项目开发过程中从仓库获得的不稳定构件为最新版本的构件。当我们把例如2.1-SNAPSHOT版本的这个构件部署到私服仓库时,maven会自动把2.1-SNAPSHOT中的SNAPSHOT换成时间(和次数)。也因此,我们能够通过这个时间来判断版本的新旧。而当我们再用version为2.1-SNAPSHOT的这个构件坐标从私服下载这个构件时,maven也会通过判断很多版本的这个构件名字中的时间去寻找并下载这个最新版本的构件。要特别注意:1,当构件经过完善测试需要发布后,要把其版本改为稳定版本;2,最好不要使用外部的快照版本,由于快照版本的不稳定,可能会影响你正在开发的项目。


四,从仓库解析依赖的机制

======未完待续

热点推荐