Maven学习(七)仓库

* Maven仓库

         在项目开发中,  项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件,

         Maven仓库就是放置JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,节省了磁盘资源,

         也节省了时间 不用拷来拷去的。

         此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。

         你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。

* 仓库分类

在运行Maven的时,Maven所需要的依赖构件都是直接从本地仓库获取的,如果本地仓库有依赖构建,直接使用;

如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

* 本地仓库缺省地址在${user.home}/.m2/repository目录下,(例如:C:\Documents and Settings\Administrator\.m2\repository)

自定义本地仓库位置:

      配置进入maven/conf目录 编辑settings.xml文件 修改localRepository节点

 *中央仓库 是一个默认的远程仓库,  安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvn clean install,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。 这个Maven中央仓库是在apache-maven3\lib\maven-model-builder-3.0.4.jar中定义,

  超级POM: \org\apache\maven\project\pom-4.0.0.xml

 *私服是一种特殊的远程仓库  为了节省宽带资源和时间 应该在局域网内架设一个私有的仓库服务器,私服代理广域网上的远程仓库, 供局域网内的Maven用户使用,

  当Maven需要下载构建的时候,先给私服仓库发出请求, 如果私服上不存在构建,则从外部的远程仓库下载,缓存到私服仓库中,再为maven的下载请求提供服务。

 

* 远程仓库配置

1.编辑项目pom文件

<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>  

 repositories节点下,可以有多个repository,每个repository都有一个唯一的ID,一个name,以及最重要的,远程仓库的url。

此外<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件。

2.在settings.xml中配置全局的远程仓库  

在每个项目的pom中配置远程仓库 只是针对当前项目,  如果有10个项目  那就要配置10次  重复配置可以做到只配置一次,就是在settings.xml中做全局配置

<settings>  
  ...  
  <profiles>  
    <profile>  
      <id>dev</id>  
      <!-- repositories and pluginRepositories here-->  
    </profile>  
  </profiles>  
  <activeProfiles>  
    <activeProfile>dev</activeProfile>  
  </activeProfiles>  
  ...  
</settings>  

 

* 远程仓库认证

编辑conf/settings.xml文件

<servers>  
  <server>  
    <id>和pom文件中repository->id元素相同</id>  
    <privateKey>/path/to/private/key</privateKey>  
    <passphrase>optional; leave empty if not used.</passphrase>  
  </server>  
</servers>  

server元素的id必须和pom中需要认证的repository元素完全一直。

 

* 构建部署至远程仓库

  mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。

本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。

配置POM的distributionManagement来指定Maven的部署位置

<project>    
  ...    
  <distributionManagement>    
    <repository>    
      <id>nexus-releases</id>    
      <name>Nexus Release Repository</name>    
      <url>http://127.0.0.1:8088/nexus/content/repositories/releases/</url>    
    </repository>    
    <snapshotRepository>    
      <id>nexus-snapshots</id>    
      <name>Nexus Snapshot Repository</name>    
      <url>http://127.0.0.1:8088/nexus/content/repositories/snapshots/</url>    
    </snapshotRepository>    
  </distributionManagement>    
  ...    
</project>    

Maven区别对待release版本的构件和snapshot版本的构件,snapshot为开发过程中的版本,实时,但不稳定,release版本则比较稳定。

Maven会根据你项目的版本来判断将构件分发到哪个仓库。

 一般来说,分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:

<settings>    
  ...    
  <servers>    
    <server>    
      <id>nexus-releases</id>    
      <username>username</username>    
      <password>password</password>    
    </server>    
    <server>    
      <id>nexus-snapshots</id>    
      <username>username</username>    
      <password>password</password>    
    </server>      
  </servers>    
  ...    
</settings>  

 

* 镜像

<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>  

 

posted @ 2015-04-09 15:37  阳光温暖了心情  阅读(698)  评论(0编辑  收藏  举报