文档章节

Maven 使用Nexus创建私服

cloud-coder
 cloud-coder
发布于 2013/11/26 14:24
字数 2724
阅读 7.3K
收藏 10

仓库管理软件:
    私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库
    有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:
    Apache基金会的Archiva、JFrog的Artifacotory和Sonatype的Nexus,Archiva是开源的,Artifacotory和Nexus的核心也是开源的

    Nexus分为开源版和专业版,开源版本基本GPLv3许可证,其特性足以满足大部分Maven用户的需要,特性如下:
    较小的内存占用(最少仅为28MB)
    基于ExtJS的友好界面
    基于Restlet的完全REST API
    支持代理仓库、宿主仓库和仓库组
    基于文件系统、不需要数据库
    支持仓库索引和搜索
    支持从界面上传Maven构件
    细粒度的安全控制

    Nexus专业版本是需要付费购买的,对开源版本多如下特性:
    一些专业安全控制
    发布流程控制等需要的特性

安装Nexus
    Nexus是典型的JavaWeb应用,它有两种安装包:包含jetty容器的Bundle包,不包含Web容器的war包
    解压后直接运行即可

    解决压包含如下两个目录:
    nexus-webapp-xxx:该目录包含了Nexus运行所需要的文件,如启动脚本、依赖jar包等
    sonatype-work:该目录包含Nexus生成的配置文件、日志文件、仓库文件等

    其中,第一个目录是运行Nexus所必需的,而且所有相同版本的Nexus实例所包含的该目录内容都是一样的。
    第二个目录不是必须的,是在运行的时候动态创建的
    所以需要备份Nexus的时候,默认备份sonatype-work目录就可以。

    在linux下面安装
    WARNING - NOT RECOMMENDED TO RUN AS ROOT
    ****************************************
    If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script

    在172.168.27.70服务器上操作
    root用户操作(创建maven用户并赋权限)
    groupadd -g 1000 maven
    useradd -d /opt/maven/ -g 1000 maven
    chown -R maven:maven /opt/maven
    passwd maven
    su - maven
    上传至/opt/maven目录
    unzip nexus-2.3.0-04-bundle.zip
    ln -s nexus-2.3.0-04 nexus
    cd nexus/bin
    ./nexus start

    设置环境变量
    vi .bashrc
    增加如下内容:
    export NEXUS_HOME=/opt/maven/nexus-2.3.0-04
    export PATH=$PATH:$NEXUS_HOME/bin

    即可在任何目录运行nexus命令,如
    nexus start

    Usage: /opt/maven/nexus-2.3.0-04/bin/nexus { console | start | stop | restart | status | dump }

    用admin账号登录nexus(建议采用firefox登录,展示效果较好,在其他浏览器兼容器不好)
    admin/admin123
    deployment/deployment123

添加如下远程仓库: 

https://repository.apache.org/content/repositories/releases/
http://repository.apache.org/snapshots/
http://repo1.maven.org/maven2/
http://nexus.codehaus.org/snapshots/
http://download.java.net/maven/2/

http://repository.jboss.org/maven2/

https://repository.sonatype.org/content/groups/forge/

    alibaba 

http://code.alibabatech.com/mvn/releases

 cloudera 

https://repository.cloudera.com/artifactory/cloudera-repos

http://mvnrepo.code.taobao.org/nexus/content/repositories/releases/

http://172.168.27.70:8081/nexus/index.html#welcome

    配置时勾选:Download Remote Indexes,这样nexus自动启动定时任务Scheduled Tasks下载索引
    默认Central是没有勾选Download Remote Indexes,可以修改Central的配置,下载中央仓库的索引
    并在仓库组 Public Repositories中按以下顺序增加以上4个远程仓库
    Sonatype Forge、Apache Releases、JBOSS Releases、JAVA NET

登录Nexus
    Nexus的默认管理员用户名和密码为admin/catt2013

Nexus的仓库和仓库组
    仓库有4种类型
    group(仓库组)、hosted(宿主)、proxy(代理)、virtual(虚拟)
    虚拟类型仓库的作用实际上是动态地将仓库内容格式转换,即也是为了服务maven1格式

    Nexus内置的仓库
    Maven Central: 代理Maven中央仓库
    Releases: 一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件
    Snapshots: 一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件
    3rd party: 一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件
    Apache Snapshots: 一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构件
    Codehaus Snapshots: 一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件
    Google Code: 一个策略为Release的代理仓库,用来代理Google Code Maven仓库的发布版本构件
    java.net - Maven 2:一个策略为Release的代理仓库,用来代理java.net Maven仓库的发布版本构件
    Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务
    Public Snapshot Repositories:该仓库组将上述所有策略为Snapshot的仓库聚合并通过一致的地址提供服务

    仓库分类的概念
    Maven可以直接从宿主仓库下载构件;也可以从代理仓库下载构件,
    而代理仓库会间接地从远程仓库下载并缓存构件;最后,为了方便,可以从
    仓库组下载构件,而仓库组没有实际内容(图中用虚线表示),它会转向其包含
    的宿主仓库或代理仓库获得实际构件的内容

Nexus的索引与构件搜索
    Nexus通过维护仓库的索引来提供搜索功能,能在很大程度上方便Maven用户定位构件坐标

    为了能够搜索Maven中央仓库,首先需要设置Nexus中的Maven Central代理仓库下载远程索引,需要注意的是:
    这上配置的值默认是关闭的,此外,由于中央仓库的内容比较多,因此其索引文件比较大,Nexus下载该文件也需要比较
    长的时间。

    提供的搜索方式如下:
    关键字搜索:
    GAV搜索:允许用户通过设置GroupId、ArtifactId、Version等信息来进行更有针对性的搜索
    类名搜索:允许用户搜索包含某个JAVA类的构件
    校验搜索:(checksum Search) 允许用户使用构件的校验(如通过spring-core-3.0.6.RELEASE.jar.sha1的内容)进行搜索

    有了中央仓库的索引,用户不仅能够搜索构件,还能够直接浏览中央仓库的内容。即Nexus的索引浏览功能。在Repositories页面中,
    选择Browse Index选项卡,就能看到中央仓库内容的树形结构。

    以上的索引及浏览功能都是基于Nexus索引而实现的,确切的应该称之为nexus-indexer
    Nexus能够遍历一个Maven仓库所有的内容,搜集它们的坐标、校验和所含的JAVA类信息,然后以nexus-indexer的形式保存起来。
    中央仓库维护了这样的一个nexus-indexer,因此本地的Nexus下载到这个索引之后,就能在此基础上提供搜索和浏览等服务。

    注意:不是任何一个公共仓库都提供nexus-indexer,对于那些不提供索引的仓库来说,无法对其进行搜索。

配置Maven从Nexus下载构件
    在POM中为Maven配置仓库和插件仓库,这样的配置只对当前Maven项目有效,在实际应用中,需要在settings.xml中配置。
    这样对所有本机Maven项目有效。但是settings。xml并不支持直接配置repositories和pluginRepositories,
    可以通过Profile机制进行配置

    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>nexus repository</name>
                    <url>http://localhost:8081/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>nexus repository</name>
                    <url>http://localhost:8081/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
    这样的配置已经能让本机所有的Maven项目从Nexus私服下载构件,但还会不时地访问中央仓库central
    如果希望所有Maven下载请求都通过Nexus,以全面发挥私服的作用,就需要配置镜像。
    <mirrors>
        <mirror>
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/nexus/content/groups/public/</url>
        </mirror>
      </mirrors>

部署构件至Nexus
    宿主仓库的主要作用是存储组织内部的,或者一些无法从公共仓库中获得的第三方构件,供项目项目使用。

    用户可以配置Maven自动部署构件至Nexus的宿主仓库,也可以通过界面手工上传构件

    使用Maven部署构件至Nexus(在所在项目的pom.xml中配置)
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Releases Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshots Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    Nexus的仓库对于匿名用户是只读的,为了能够部署构件,需要在settings.xml中配置认证信息
       <servers>
         <server>
        <id>nexus-releases</id>
        <username>admin</username>
        <password>admin123</password>
        </server>
        server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin123</password>
        </server>
      </servers>

    手工部署第三方构件至Nexus
    针对由于许可证的因素无法公共地放在公共仓库中,还有大量的小型项目,没有把自己的构件分发到中央仓库,可以手工下载到本地,
    然后通过Nexus的界面上传到私服中。

    上传第三方构件,上传至3rd party宿主仓库

Nexus的权限管理
    访问控制模型
    Nexus是基于权限(privilege)做访问控制的,服务器的每一个资源都有相应的权限来控制。因此用户执行特定的操作时就必须有必要的权限。

    Nexus预定义的三个用户,这三个用户对应了三个权限级别:
    admin/admin123:拥有对nexus服务的完全控制
    deployment/deployment123:能够访问nexus,浏览仓库内容、搜索、并且上传部署构件,但无法对Nexus进行任何配置
    anonymous:对应了所有未登录的匿名用户,可以浏览仓库并进行搜索。

    为项目分配独立的仓库
    为每个项目分配独立的仓库,并且只将仓库的部署、修改、和删除权限赋予该项目成员,其他用户只能读取、下载和搜索该仓库的内容。

    有了仓库之后,就需要创建基于仓库的增、删、改、查权限,在Nexus中,这样的权限是基于Repository Target建立的,
    Repository Target实际上是一系列表达式,在访问仓库某路径下面的内容的时候,Nexus会将仓库路径与Repository Target的
    正则表达式一一匹配,以检查权限是否正确。

    先建立Repository Target,然后根据Repository Target建立对应的privileges, 建立包含如上权限的角色,
    根据需要将其分配给项目的团队成员。

Nexus的调度任务
    Nexus提供了一系列可配置的调度任务来方便用户管理系统。

© 著作权归作者所有

cloud-coder
粉丝 247
博文 193
码字总数 141277
作品 0
广州
架构师
私信 提问
加载中

评论(1)

h
heroshell
棒棒哒79
ubuntu下使用Nexus搭建Maven私服

ubuntu下使用Nexus搭建Maven私服 1、私服简介: 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服...

等待与憧憬
2018/07/30
0
0
搭建Maven私服-Nexus

Maven 私服,可以代理远程仓库和部署自己或第三方构件。本文介绍使用最广泛搭建 Maven 私服的工具: Sonatype Nexus。 nexus 作者环境 本次搭建私服是在局域网的一台服务器上,操作系统为 Ce...

SuShine
2018/08/08
0
0
Maven的本地仓库、中心仓库、私服(NEW)

本地仓库 设置本地仓库到指定目录,而不使用Maven默认的配置(默认放在C:/user/m2.目录下) 打开Maven的解压目录E:softapache-maven-3.1.0conf,修改settings.xml 配置localRepository即可完...

SuShine
2018/05/23
459
0
建立Maven私服 - Nexus (七)

私服不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。通过建立自己的私服,就可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构建等,从而高效地使用Maven。Nex...

半夏alvin
2014/01/24
1.7W
3
Linux搭建Maven私服Nexus3.x环境

一、Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。...

898009427
2018/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

今日头条技术架构分析,看这篇就对了!

点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Anywhere, it is a good in the past, recall the number of times many, all would be ligh......

吧主
6分钟前
20
0
影响K8S Pod分配和调度策略的两大关键特性

在Kubernetes中有一个最复杂的调度器可以处理pod的分配策略。基于在pod规范中所提及的资源需求,Kubernetes调度器会自动选择最合适的节点来运行pod。 但在许多实际场景下,我们必须干预调度过...

RancherLabs
8分钟前
25
0
Linux笔记

Linux常用命令之chmod修改文件权限777和754 示例:chmod 777 /etc/squid 运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行)。...

owenzhang24
12分钟前
11
0
教你如何在CentOS7系统上安装postgreSQL11

本文教你如何在CentOS7系统上安装postgreSQL11。 1.添加PostgreSQL Yum存储库 sudo yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-......

Linux就该这么学
19分钟前
37
0
欧盟将禁止公共场所人脸识别:谷歌支持,微软反对

   来源:新浪、VB   近日,彭博社披露的一份欧盟人工智能“白皮书”草案显示,欧盟计划对人工智能开发者提出具有法律约束力的新要求,以确保现代科技的开发和使用符合道德规范。    ...

水果黄瓜
22分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部