maven私有仓库的搭建和使用

什么是maven私有仓库?

maven私有仓库是一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。

有了私有仓库之后,当 Maven 需要下载构件时,直接请求私有仓库,私有仓库存在则下载到本地仓库;否则,私有仓库请求外部的远程仓库,将构件下载到私有仓库,再提供给本地仓库下载。
为什么要搭建maven私有仓库?

    maven自己的中央库访问速度比较慢,再加上墙的问题,会时断时续,影响工作效率
    有些jar包由于种种原因,maven中央仓库没有,比如我们用到的jnlua。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用。这种情况我们需要把jar包手动上传到私有仓库
    如果公司经常开发一些公共的组件,如何共享给各个开发组,使用拷贝方式吗?如果这样,公共库升级了怎么办?

私有仓库的搭建(这一步是搭建服务器的流程,你自己机器不需要搭建):

下载地址:http://www.sonatype.com/nexus-repository-oss

Linux版的无需安装,直接解压即可,然后进入bin目录下,运行./nexus start,启动服务

在地址栏里输入服务IP地址和8081端口就可以打开用户界面,例如http://192.168.1.2:8081

点Sign In登录管理页面,用户名密码为,admin和admin123

在Repositories页面里显示着,默认已经创建了5个仓库(2个为group),直接可以拿来用,无需再自行创建仓库。
如何尽情的玩耍(下jar包飞快,只需这一步):

把下面的内容保存成settings.xml,放在你的.m2目录下,这个目录在用户的根目录下,从此以后,下载速度飞快

两个配置,第一个仓库是代码库,第二个是插件库,这个配置也可以放在项目的pom里,只影响本项目

<settings>
    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>maven-central</id>
                    <name>maven-central</name>
                    <url>http://192.168.1.2:8081/repository/maven-central/</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>maven-central</id>
                    <name>maven-central</name>
                    <url>http://192.168.1.2:8081/repository/maven-central/</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

</settings>

到这里,你下载jar包就会非常迅速了,下面是关于发布的流程,如果你不发布代码,不需要下面的配置
部署构件到私有仓库

我们在实际开发过程是多个人的,那么总有一些公共模块或者说第三方构件是无法从Maven中央库下载的。我们需要将这些构件部署到私有仓库上,供其他开发人员下载。用户可以配置Maven自动部署构件至Nexus的宿主仓库,也可以通过界面手动上传构件。
第一种方式:发布自己编码的项目

日常开发的快照版本部署到Nexus中策略为Snapshot的宿主仓库中,正式项目部署到策略为Release的宿主仓库中,POM的配置方式如下, 注意:这个配置不可以写在settings.xml文件中

<distributionManagement>
    <repository>
        <id>maven_releases</id>
        <name>core Release Repository</name>
        <url>http://192.168.1.2:8081/repository/maven-releases</url>
    </repository>
    <snapshotRepository>
        <id>maven_snapshots</id>
        <name>core Snapshots Repository</name>
        <url>http://192.168.1.2:8081/repository/maven-snapshots</url>
    </snapshotRepository>
</distributionManagement>

Nexus的仓库对于匿名用户只是只读的。为了能够部署构件,我们还需要再settings.xml中配置验证信息(其中,验证信息中service的id应该与POM中repository的id一致):

    <servers>
        <server>
            <id>maven_releases</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
        <server>
            <id>maven_snapshots</id>
            <username>admin</username>
            <password>admin123</password>
        </server>
    </servers>

然后直接在IDE里运行 mvn deploy -e 就会发布到相应的仓库了

这个地方有的同学可能会碰到405错误

可能的原因有2个,
1.配置字母拼错了
2.distributionManagement配到settings里了
3.验证信息没配

还有的报 unexpected end of stream,eclipse这样配置就行了

Window->Preferences->Maven->Installations
Click add, then specify maven directory, click finish.
就是把你本地的maven配置进去,然后run configurations的时候 maven runtime配置成添加的这个


第二种方式:手动部署第三方构件至私有仓库

如第三方JAR包:test-0.9.6.jar

运行命令:

mvn deploy:deploy-file

-DgroupId=com.test

-DartifactId=test

-Dversion=0.9.6

-Dpackaging=jar

-Dfile=D:\test-0.9.6.jar

-Durl=http://192.168.1.2:8081/repository/maven-releases/

-DrepositoryId=maven_releases

这里来对这些参数进行说明:

DgroupId、DartifactId、Dversion——表示的是构建的基本坐标,你需要根据你上次的jar包自行改变
Dpackaging——表示的是上传的包的类型,一般为jar,不用改变,根据你的实际情况来改变。
Dfile——表示的是你需要上传的包的地址
Durl——表示的是你要上传到的私有仓库的地址
DrepositoryId——表示你的身份信息,可以从第二步获取。

注意

确保你的账号拥有权限
确保第三步的参数没有错
确保你的网络没有问题

需要注意的是,第二种方式,这个配置文件是总的配置文件,也就是位于%安装目录%\conf\settings.xml的配置文件。我已经试过,在用户级别的配置文件setting.xml文件上配置的用户信息将无效。
Release和Snapshot有啥区别:

maven中的仓库分为两种,snapshot快照仓库和release发布仓库。 snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。 定义一个组件/模块为快照版本,只需要在pom文件中在该模块的版本号后加上-SNAPSHOT即可(注意这里必须是大写) maven2会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。 如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。 对于快照版本,同一版本号可以提交多次,nexus会在版本号的基础上自动加上时间戳进行区分,每次从nexus上download的都会是对应版本号的最新版本。 如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,如果此时提交的版本号和nexus上对应的版本号相同则会保错,提示不能提交。
最后,项目里的jar包引用,这样就可以了

        <dependency>
            <groupId>com.test</groupId>
            <artifactId>test</artifactId>
            <version>0.9.6</version>
        </dependency>

猜你喜欢

转载自watersrc.iteye.com/blog/2345030