码迷,mamicode.com
首页 > 其他好文 > 详细

发布Maven 到Nexus中央仓库

时间:2016-04-26 22:16:13      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:上传第三方包到nexus仓库

之前已经介绍过Nexus 部署Maven私服仓库 今天说说关于将JAR(项目)发布到Maven私服。


这个需求是因为Web项目使用的Maven库是第三方的,而三方的这个库又不稳定(如版本的更新、网络中断),虽然做了个库代理下载了索引,但有一天这个第三方的库服务突然关闭了,然后就悲剧了……


这种悲剧在我的团队中就发生过,可能是对Maven库的理解不透彻,也可能是不清楚哪些JAR是私有的。不过怎样都好,出了问题就要解决,最初是想将缺少的JAR上传到本地Maven私服,但不通其法失败,为了降低对开发的影响,最后又换了一个第三方的库……


最近终于将这个问题解决了,突然发现原来是如此的简单……


先来说说sonatype Nexus OSS的仓库

技术分享

仓库类型:

    group: 仓库组。可将选定仓库添加到仓库组

    hosted: 宿主。自创建的文件放到此类型下

    proxy: 代理。

    virtual:虚拟。

仓库属性:

Policy

    Release:发布,既是代表稳定版本

    Snapshot:快照,代表开发版本

Download Remote Indexes :仓库远程索引,默认为False

Default Local Storage Location: 默认本地目录

Override Local Storage Location:重新本地存储位置


默认库:   

  • Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。

  • Releases:这是一个策略为Releases的宿主类型仓库,用来部署组织内部的发布版本构件。

  • Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件。

  • 3rd party:这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。

  • Apache Snapshots:这个一个策略为Snapshots的代理仓库,用来代理Apache Maven仓库的快照版本构件。

  • Codehaus SnapShots:这是一个策略为Snapshots的代理仓库,用来代理Cohehaus Maven仓库的快照版本构件。http://morrowind.blog.51cto.com/addblog.php

  • Sonatype Repositories:这是一个策略为Release的代理仓库,用来代理sonatype Maven仓库的快照版本构件。

  • Central M1 shadow : 用于提供中央仓库中M1格式的发布版本的构件镜像仓库


发布到Maven 中央仓库

Nexus上传:

    选择Releases仓库,在"Artifact Upload"属性卡内,选择“Select Artifacts(s) to Upload"上传需要发布的包,“GAV Definition” 选择 pom文件,如果没有pom文件在选GAV Parameters后手动指定包坐标。


使用Maven部署构件至Nexus

    选择Releases/Snapshots仓库,在"Configuration"属性卡内,确认“Deployment Policy“属性为 Allow Redeploy


    启用Deployment用户,Nexus默认有三个用户,其中Deployment用户用于部署项目

技术分享

Deployment用户默认密码为deployment123,右键菜单可修改或重置密码

技术分享


在pom.xml中分别对Release版本和Snapshot版本配置部署仓库,其中id唯一,url分别对应私服中Releases和Snapshots仓库的Repository Path:

技术分享

<uniqueVersion>表示是否为Snapshot版本分配一个包含时间戳的构建号,效果如下:

技术分享

技术分享

    <distributionManagement>
        <snapshotRepository>
            <id>user-snapshot</id>
            <name>User Porject Snapshot</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
            <uniqueVersion>true</uniqueVersion>
        </snapshotRepository>
        <repository>
            <id>user-release</id>
            <name>User Porject Release</name>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
        </repository>
    </distributionManagement>


Nexus的仓库对于匿名用户只是只读的。为了能够部署构件,我们还需要再settings.xml中配置验证信息:

    <servers>
        <server>
            <id>user-release</id>
            <username>deployment</username>
            <password>deployment123</password>
        </server>
        <server>
            <id>user-snapshot</id>
            <username>deployment</username>
            <password>deployment123</password>
        </server>
        …        
    </servers>


其中,验证信息中service的id应该与POM中repository的id一致。

这样通过 maven 可以自动布置到Nexus私服中了。命令如下:

mvn clean deploy -Dmaven.test.skip=true

也可右键pom.xml -> Run As ->2 Maven build

技术分享

发布成功后,在私服的仓库中就能看到了:

技术分享


参考:http://www.cnblogs.com/luotaoyeah/p/3817465.html


推荐:Maven 权威指南或Maven 实战

发布Maven 到Nexus中央仓库

标签:上传第三方包到nexus仓库

原文地址:http://morrowind.blog.51cto.com/1181631/1768001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!