`

maven日记(三):仓库详解

阅读更多

 

maven在某个统一的位置存储所有maven项目共享构件,这个统一位置就是仓库

>> 仓库分类

maven只有两种仓库:本地仓库和远程仓库。

这里介绍一些特殊的远程仓库:

* 中央仓库是maven核心自带的远程仓库,它包含了绝大部分开源构件。

* 私服是另一种特殊的远程仓库,为了节省宽带和时间,应该在局域网架设一个私有仓库服务器,用其代理所有外部的远程仓库,内部的项目还能部署到私服上供其他项目使用。

* 除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有Java.net Maven仓库http://download.java.net/maven/2/和JBoss Maven库httpL//repository.jboss.com/maven2等

本地仓库默认路径是$USER_HOME/.m2/repository/,如果自己想自定义路径,可以修改~/.m2/settings.xml文件:

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

默认情况向~/.m2/settings.xml文件时不存在的,需要从$M2_HOME/conf/settings.xml文件复制一份过去。执行mvn clean install可以构建到本地仓库中。

对每个用户来说,本地仓库只有一个,但是可以配置很多歌远程仓库

>> 私服

假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内maven用户使用。当maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部远程仓库下载,缓存到私服上后,再为maven的下载请求提供下载,此外一些无法从外部仓库下载到的构件也能从本地上传到私服后供大家下载。

即便是只有一个连入internet个人机器上也应该建立私服,因为私服可以帮你:

* 节省自己的外网宽带

* 加速maven构建

* 部署第三方构件

* 提高稳定性,增强控制

* 降低中央仓库负荷

>> 远程仓库的配置

<repositories>
    <repository>
        <id>jboss</id>
        <name>JBoss Repository</name>
        <url>http://repository.jboss.com/maven2/</url>
        <releases>
            <enabled>true</enabled> 
        </releases>
        <snapshots>
            <enabled>false</enabled>
            <updatePolicy>daily</updatePolicy>
            <checksumPolicy>ignore</checksumPolicy>
        </snapshots>
        <layout>default</layout>
    </repository>
</repositories>

在settings.xml文件中配置认证信息:

<settings>
    <servers>
        <server>
            <id>my-proj</id>
            <username>user</username>
            <password>pwd</password>
        </server>
    </servers>
</settings>

>> 配置部署的远程仓库

<distributionManagement>
    <repository>
        <id>proj-releases</id>
        <name>Proj Release Repository</name>
        <url>http://192.168.1.100/content/repositories/proj-releases</url>
    </repository>
    <snapshotRepository>
        <id>proj-snapshots</id>
        <name>Proj Snapshot Repository</name>
        <url>http://192.168.1.100/content/repositories/proj-snapshots</url>
    </snapshotRepository>
</distributionManagement>

在需要认证的时候,需要在settings.xml中创建一个server元素,其id与仓库的id匹配,并配置正确的认证信息,不论是从远程仓库下载还是部署构件至远程仓库,当需要认证的时候,配置方式都是一样的。

配置正确后,运行mvn clean deploy就会部署上去了,哦也~~

>> 快照版本

版本值1.0.1、1.2-alpha-4都表示稳定版,而2.1-SNAPSHOT、2.2-20111214.221414-13都是快照版

使用快照的原因:如果版本设定为2.1-SNAPSHOT,然后发布到私服中,那么在发布的过程中,maven会自动为构件打上时间戳。比如2.1-20091214.221414-12表示2009年12月14日22点14分14秒,第12次快照。有了该时间戳,那么就很容易找到最新的SNAPSHOT版本,但其他依赖这个构件的时候,会自动去仓库检查最新的SNAPSHOT版本,发现哟更新的时候就会下载最新的。

但经过完善的测试后,版本2.1文档版发布,只对应了唯一的构件,不会有时间戳了。

>> 镜像

任何一个可以从仓库Y获得的构件,都能从它的镜像X中获取,也就是说镜像是原仓库的超集。

由于地理位置因素,可以配置镜像提供比中央仓库更快的服务,比如http://maven.net.cn/content/groups/public/是中央仓库http://repo1.maven.org/maven2/在中国的镜像,可以配置maven使用该镜像代替中央仓库,编辑settings.xml文件:

<settings>
    <mirrors>
        <mirror>
            <id>maven.net.cn</id>
            <name>one mirror</name>
            <url>http://maven.net.cn/content/groups/public</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
</settings>

如果该镜像需要认证,也是同之前的配置server,不解释了~

<mirrorOf>*</mirrorOf>:所有的远程仓库

<mirrorOf>external:*</mirrorOf>:匹配所有远程仓库,但是localhost,file://等除外,也就是本地的不需要经过它了

<mirrorOf>repo1,repo2</mirrorOf>:匹配逗号隔开的多个仓库

<mirrorOf>*,!repo1</mirrorOf>:匹配所所有远程仓库,repo1除外

仓库搜索服务:

Snatype Nexus:http://repository.sonatype.org/

Jarvana:http://jarvana.com/jarvana/

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics