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

        <localRepository>D:\java\apache-maven-3.0.4\repository\</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

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

           *私服     是一种特殊的远程仓库  为了节省宽带资源和时间 应该在局域网内架设一个私有的仓库服务器,私服代理广域网上的远程仓库, 供局域网内的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 on 2012-07-18 22:29  YangJin  阅读(340)  评论(0编辑  收藏  举报