十.搭建Nexus私服

    局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库
    多个开发人员通过内网快速访问私服,私服没有的依赖会自定去远程仓库下载。A开发人员可以上传本地jar给其他开发人员使用
    1.下载最新版本的nexus  下载地址http://www.sonatype.org/nexus/go 
        nexus-2.14.2-01:nexus工作相关信息
        sonatype-work  :私服依赖存放位置
    2.启动方法:
        方法1:
            1.解压后进入\nexus-版本号\bin\jsw\windows-选择操作系统\
                    console-nexus.bat:启动nexus
                    install-nexus.bat:将nexus安装成windows服务
                    start-nexus.bat:  启动nexus的windows服务
                    stop-nexus.bat:   停止nexus的windows服务
                    uninstall-nexus.bat:取消将nexus安装成windows服务
            2.双击console-nexus.bat运行。游览器中输入http://127.0.0.1:8081/nexus/
        方法2:
            1.环境变量中加入nexus的bin目录,让nexus命令可以在任意位置使用
            2.修改:nexus-2.14.2-01\bin\jsw\conf\wrapper.conf,大概15行
                wrapper.java.command=jdk的bin目录\java(D:\jdk1.7\bin\java)
            3.在cmd输入:nexus install即可安装服务
            4.在cmd输入:nexus start即可启动服务
            5.游览器中输入http://127.0.0.1:8081/nexus/
    3.8081为默认的端口号,要修改端口号可进入nexus-2.1.2-bundle\nexus-2.1.2\conf\打开nexus.properties文件,修改application-port属性值就可以了。
    4.默认的用户名和密码:admin/admin123
    5.仓库组合:名称  类型  ...
    5.PublicRepositories(仓库名称):  仓库组有以下内容
        3rd party: 无法从公共仓库获得的第三方依赖发布版本的构件仓库
        Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
        Central: 用来代理maven中央仓库中发布版本构件的仓库
        Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
        Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
        Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
        Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
    6.Nexus仓库类型 nexus的仓库类型分为以下四种:
        group: 仓库组,包含下面所有类型,在pom.xml的远程仓库地址配置为group即包含了下面的所有类型的工厂,可以对group包含的仓库类型进行管理
                添加或删除下面的包含,Ordered Group Repositories为被选中的仓库
        hosted:宿主,面向局域网,不面向公网,保存开发者提交的版本,根据不同的版本保存到不同的host仓库以及保存第三方jar
            1.Releases  hosted:保存varsion为release的项目
            2.Snapshots hosted:保存varsion为snapshot的项目
            3.3rd party hosted:保存远程仓库没有的第三方jar
        proxy:代理,保存中央工厂下载的依赖,可以配置保存路径
            1.Apache Snapshots  保存apache的依赖
            2.Central           保存其他第三方依赖
        virtual:基于maven1的,虚拟的
    7.私服的使用在pom.xml(单个项目),或者setting.xml(所有maven项目)中配置私服(曾经项目的pom老是报错,最后删除了本地的所有依赖和nexus的centrl下面的所有依赖后解决)
        1.在项目的pom.xml中添加指定私服代码(单个项目)
        <repositories>
            <repository>
                <id>nesus(私服id,随便起)</id>
                <name>Nexus Repository</name>
                <!-- 这里为仓库组地址,可根据需求配置不同的仓库地址(Repository Path的值) -->
                <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
                <!-- 是否会从Releases  hosted仓库找依赖 -->
                <releases>
                    <enabled>true</enabled>
                </releases>
                <!-- 是否会从Snapshots hosted仓库找依赖,默认false -->
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
        2.在settings.xml文件中加入指定私服代码(所有项目)(profiles标签中)
            <profile>
              <id>仓库名字(nesxusProfile)</id>
              <repositories>
                <repository>
                  <id>nesus(私服id,随便起)</id>
                    <name>Nexus Repository</name>
                    <!-- 这里为仓库组地址,可根据需求配置不同的仓库地址(Repository Path的值) -->
                    <url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
                    <!-- 是否会从Releases  hosted仓库找依赖 -->
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <!-- 是否会从Snapshots hosted仓库找依赖,默认false -->
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
              </repositories>
            </profile>
           配置2配置后并不会生效,加入生效代码:(控制不同版本需要不同仓库,可以配置全部仓库,在不同版本打开不同的生效)
             <activeProfiles>
                <activeProfile>id名(nesxusProfile)</activeProfile>
                <activeProfile>仓库2...</activeProfile>
             </activeProfiles>
    8.限制开发者直接访问中央工厂
        解决方案:将对中央工厂或者所有工厂的访问镜像(转到)到nexus(或指定的工厂)工厂,如果nexus服务未开启,讲报错,不会到中央工厂访问,如果开启了但nexus没有依赖,将又nexus负责访问中央工厂
        在settings.xml中加入镜像url
        <mirror>
          <id>maven.net.cn(随便起,如果访问ali的镜像可以为:aliRepo)</id>
          <!-- 对中央工厂(id为central)的访问讲转到下面配置的url工厂,不会在访问中央工厂,url工厂没有会自动到中央工厂下载 -->
          <!-- 对所有工厂的访问(*)的访问都会转到下面配置的url工厂,只会访问这个url工厂,url工厂没有会自动到中央工厂下载 -->
          <mirrorOf>central或*(私服id,repositories>repository下指定访问私服的id)</mirrorOf>
          <name>central mirror in china</name>
          <url>http://maven.net.cn/content/groups/public</url>
        </mirror>
    9.发布自己的项目到nexus工厂(mvn deploy命令)
        1.配置发布工厂(在项目的pom.xml 或者 父pom.xml中 所有项目继承)
            <!-- 配置发布工厂,发布不同版本的项目到不同版本的工厂 -->
              <distributionManagement>
                <!-- release版本发布的工厂 -->
                <repository>
                    <id>user-release</id>
                    <name>user release resp</name>
                    <url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
                </repository>
                <!-- snapshot版本发布的工厂 -->
                <snapshotRepository>
                    <id>user-snapshot</id>
                    <name>user snapshots resp</name>
                    <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
                </snapshotRepository>
              </distributionManagement>
        2.给用户授权(在settings.xml中)
            <!-- 为用户配置发布项目到nexus的权限 -->
              <servers>
                <!-- 配置发布release版本的权限,与pom.xml中distributionManagement标签中的某个id相同 -->
                <server>
                    <id>user-release</id>
                    <username>deployment</username>
                    <password>deployment123</password>
                </server>
                <!-- 配置发布snapshot版本的权限,与pom.xml中distributionManagement标签中的某个id相同 -->
                <server>
                    <id>user-snapshots</id>
                    <username>deployment</username>
                    <password>deployment123</password>
                </server>
              </servers>
        3.发布完后就可以在nexus的Snapshots和Releases工厂看到发布的项目,其他开发人员可以从这个工厂下载发布的依赖

    10.分项目管理nexus工厂(为不同的项目配置不同的发布工厂)
        (cms项目)
            1.添加工厂
                1.添加cms项目的release版要发布的工厂
                    Repositories面板下=>Add=>Hosted Repository:
                        Repository ID:工厂的ID  cms-release
                        Repository Name:工厂的名称  cms release repository
                        ...
                        Repostory Polcy:仓库策略  Release
                    Access Settings:
                        Delpoyment Polcy:是否打开发布 Allow Redeploy:允许发布
                    Save:保存
                2.添加cms项目的snapshot版要发布的工厂
                    Repositories面板下=>Add=>Hosted Repository:
                        Repository ID:工厂的ID  cms-snapshots
                        Repository Name:工厂的名称  cms snapshots repository
                        ...
                        Repostory Polcy:仓库策略  Snapshot
                    Access Settings:
                        Delpoyment Polcy:是否打开发布 Allow Redeploy:允许发布
                    Save:保存
            2.设置权限
                1.添加操作权限
                    1.为cms release仓库添加操作权限
                        Privileges面板下=>Add=>Repository Target Privilege
                            Name:权限名称 cms release privilege
                            Description:描述 cms release privilege
                            Repository:为哪个工厂添加权限 cms release repository(上面工厂的name)
                            Repository Target:添加哪些权限  All(Maven2)
                            Save:保存
                    2.为cms snapshots添加操作权限
                        Privileges面板下=>Repository Target Privilege
                            Name:权限名称 cms snapshot privilege
                            Description:描述 cms snapshot privilege
                            Repository:为哪个工厂添加权限 cms snapshot repository(上面工厂的name)
                            Repository Target:添加哪些权限  All(Maven2)
                            Save:保存
            3.添加角色并分配权限
                1.添加角色
                    Roles面板下=>Nexus Role 
                        Role id:cms-role
                        Name   :cms role
                    Role/Privilege Management:角色可以管理的权限  Add=>搜索cms=>全选=>save
            4.创建用户并添加到角色中
                1.添加用户
                    User面板下=>Add=>Nexus User
                        User ID:cms  settings.xml授权时的用户名username
                        First Name:cms
                        Last Name:cms
                        Email:xxxx@xxx.com
                        Status:Active(激活)
                        New Password:密码 cms123 settings.xml授权时的密码password
                        Confirm Password:确认密码 cms123
                        Role Management:用户的角色(上面已添加的角色的name) Add=>选择cms role=>save
            5.修改pom.xml的cms项目的发布工厂
                <!-- 配置发布工厂,发布不同版本的项目到不同版本的工厂 -->
                  <distributionManagement>
                    <!-- release版本发布的工厂 -->
                    <repository>
                        <id>cms-release</id>
                        <name>cms release resp</name>
                        <url>cms的nexus的地址</url>
                    </repository>
                    <!-- snapshot版本发布的工厂 -->
                    <snapshotRepository>
                        <id>cms-snapshot</id>
                        <name>cms snapshots resp</name>
                        <url>cms的nexus的地址</url>
                    </snapshotRepository>
                  </distributionManagement>
            6.修改给用户授权时的用户名和密码
                  <server>
                    <id>cms-snapshots</id>
                    <username>cms</username>
                    <password>cms123</password>
                </server>
            7.在发布项目,会把项目发布到新建的不同版本的cms项目仓库中







    9.解决私服访问中央仓库很慢的问题:
        1.将对中央仓库的访问改为国内仓库访问:Repositories=>Central=>Configuration=>Remote Storage Location的值改为国内仓库地址,save
    10.本地和远程仓库的关系(优先级)(如果搭建远程私服报错,复制索引到远程仓库,或者项目右键maven->update project,但是这次勾选 Force Update)
        1. 当依赖的范围是system的时候,Maven直接从本地文件系统解析构件
        2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功
        3. 在本地仓库不存在相应的构件情况下,如果依赖的版本是显示的发布版本构件,则遍历所有的远程仓库,发现后下载使用
        4. 如果依赖的版本是RELEASE或LATEST, 则基于更新策略读取所有远程仓库的元数据,将其于本地仓库的对应元数据合并后,计算出RELEASE或者LATEST的真实值,然后基于这个真实值检查本地仓库
        5. 如果依赖的版本是SNAPSHOT, 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库或从远程仓库下载
        6. 如果最后解析到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件 至 非时间戳格式,并使用该非时间戳格式的构件
        详见:https://www.zhihu.com/question/24930782

    8.详见:http://www.cnblogs.com/luotaoyeah/p/3791966.html或http://blog.csdn.net/liujiahan629629/article/details/39272321 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值