nexus book

 

nexus官网下载地址

https://help.sonatype.com/repomanager3/product-information/download/download-archives---repository-manager-3

nexus安装

nexus依赖jdk, 2.6版以上的要用 jdk1.7 , 3.0以上要求jdk1.8

 

两种安装方式

Nexus的安装有两种实现方式:
1)war包安装方式
下载地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01.war
直接将war包放在tomcat的根目录下,启动tomcat就可以用了

2)源码安装方式 
官方下载地址:https://www.sonatype.com/download-oss-sonatype , 基本下不动

百度云链接:https://pan.baidu.com/s/1gMsMmInyPY1iCTmyMHSW6w
提取码:cvi0

 

[root@master-node ~]# cd /usr/local/src/
[root@master-node src]# wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.2.0-01-unix.tar.gz 
[root@master-node src]# tar -zvxf nexus-3.2.0-01-unix.tar.gz 
[root@master-node src]# mv nexus-3.2.0-01 /usr/local/nexus

 

 

参考: Linux 部署 Nexus (下载、安装、使用)==>https://blog.csdn.net/weixin_42585386/article/details/122108563

 

 

启动

本处只讲源码安装,执行在nexus的bin目录下执行./nexus start 启动nexus,显示warning

WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
[root@master
-node src]# /usr/local/nexus/bin/nexus start WARNING: ************************************************************ WARNING: Detected execution as "root" user. This is NOT recommended! WARNING: ************************************************************ Starting nexus

去掉warnning

[root@master-node src]# vim /etc/profile
#最后一行添加
export RUN_AS_USER=root
#重载配置文件
[root@master-node src]# source /etc/profile

再次执行 ./nexus start  启动, 不再有warning 。

 

开放8081端口

另外由于nexus默认8081端口,需要开放端口访问权限

[root@master-node src]# vim /etc/sysconfig/iptables
#第一行添加8081允许访问权限
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT

 

管理页面

nexus3 在第一次启动后需要访问类似于  /data/nexus3/sonatype-work/nexus3/admin.password  的 admin.password的文件去获取,比如我的为3777abcd-abce-abcd-abcd-12345678abcd

 

nexus3在初次使用时会弹窗提示录入 admin.password 中的密码, 之后会弹窗提示修改密码, 修改完密码后 , 会弹窗提示是否允许匿名用户访问(当然选不允许 Disable anonymous access)

 

 

 

nexus2 使用 访问http://youTargetIP:port:8081/nexus , 成功进入开始页。点击右上角login, 以admin/admin123(帐号/密码)登录 , 再点击Repositories , 进入以下界面

 

左边的这个Ordered Group Repositories (排好序的仓库)实际上是生效的仓库名称 ,  而右边的 Avaliable Repositories(可用仓库)是未生效的.

 

 默认刚安装完后的maven setting.xml中使用的地址为http://centos:8081/nexus/content/groups/public/

直接浏览器打开看的效果如下

 

nexus3仓库说明

默认存储位置3.x的默认存储变了,不再以.jar格式存储的,而是以.bytes格式存储的。 存储位置在目录\sonatype-work\nexus3\blobs 

.bytes格式是jar包,.properties格式是jar包信息。  里面存储有下载时间,从哪个中心库下载,下载用户,用户地址,jar包名称,大小等信息。

 

注意下面几点说明:

本小节源自: https://www.cnblogs.com/huaxingtianxia/p/6846801.html

1.component name的一些说明: 
    1)maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar 
    2)maven-releases:私库发行版jar 
    3)maven-snapshots:私库快照(调试版本)jar 
    4)maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

 

 


2.Nexus默认的仓库类型有以下四种:
    1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;
    2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);
    3)proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);
    4)virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);

 


3.Policy(策略):表示该仓库为发布(Release)版本仓库还是快照(Snapshot)版本仓库;

 


4.Public Repositories下的仓库 
   1)3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;
   2)Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库 
   3)Central: 用来代理maven中央仓库中发布版本构件的仓库 
   4)Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库 
   5)Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库 
   6)Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;
   7)Snapshots: 发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本

 


所以自定义构建的仓库组代理仓库的顺序为:Releases,Snapshots,3rd party,Central。也可以使用oschina放到Central前面,下载包会更快。
5.Nexus默认的端口是8081,可以在etc/nexus-default.properties配置中修改。
6.Nexus默认的用户名密码是admin/admin123
7.当遇到奇怪问题时,重启nexus,重启后web界面要1分钟左右后才能访问。
8.Nexus的工作目录是sonatype-work(路径一般在nexus同级目录下)

 

Nexus仓库分类:


1)Maven可直接从宿主仓库下载构件,也可以从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件 
2)为了方便,Maven可以从仓库组下载构件,而仓库组并没有时间的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容).

原图地址: https://www.processon.com/view/link/5cb6b223e4b06bcc137f76e1

 

开启搜索功能

Repositories-->Central仓库Configuration --> Download Remote Indexes项设为True , 开启nexus的下载远程索引的功能, 可在nexus中使用artifact search的功能 (该操作本人还没发现在哪)

 

 

修改密码

修改web界面登录密码

 

修改发布时的密码

 

添加代理资源库 

参考: maven学习(中)- 私服nexus搭建==>http://www.cnblogs.com/yjmyzz/p/3519373.html

点击左侧的Repositories,然后再点击右侧的Add,会弹出下拉菜单,选择Proxy Repository

 

 

Respository ID这里填写:jboss-public-repository-group (可以自已改名字)

Respository Name这里填写:JBoss Public Maven Repository Group (可以自已改名字)

其它项保持默认

Remote Storage Location这里填写:https://repository.jboss.org/nexus/content/groups/public-jboss/ (这是jboss公布的公开资源库)

然后解压到指定目录,建议放在 %nexus_home%\sonatype-work\nexus\storage\ 下

然后add一个hosted repository,参考下图:

 

 

2.4 把刚才添加的二个respoitory添加到Public Repositories组

刚才我们添加了2个新的资源库,检查一下是否包括在默认的Public Repositories组里

 

添加宿主仓库

 点击Repositories,然后再点击右侧的Add,会弹出下拉菜单,选择Hosted Repository

最后修改新建的宿主仓库的Configuration . 以下为release和snapshot 最容易遗忘的差异点,其它看下图 , 

  • Releases和3rd party设置为Disable Redeploy
  • Snapshot中的Deployment Policy这个选项设置为Allow Redeploy 

 最后不要忘了添加到Public Repositories中

添加第三方jar包

添加第三方jar包界面方式

上传第三方的jar包,选择3rd party-->Artifact Upload--> 选择GAV方式-->填好构建参数-->增加jar包-->上传,在Browse Storeage查看

 

添加第三方jar包命令方式

第一步 : 在maven的配置文件settings.xml里加上, 需要布署的远程仓库server

<servers>
    <server>
        <id>thirdparty</id>
        <username>用户名</username>
        <password>密码</password>
    </server>
</servers>

 

 

 

第二步: 在windows CMD中直接执行布署语句

mvn deploy:deploy-file -s "K:\myprogram\maven\apache-maven-3.3.9\conf\settings_using.xml" -DgroupId="com.test.temp" -DartifactId="temp" -Dversion="0.0.1" -Dpackaging=jar -Dfile="D:\temp\20210421\bobo.jar" -Durl=http://nexus.king.com:18081/nexus/content/repositories/thirdparty -DrepositoryId=thirdparty

以上参数含意如下:

-S: 指定配置文件地址
-DgroupId: 指定组名
-DartifactId: 指定包名
-Dversion: 指定版本号
-Dfile: 指定需要布署到远程仓库的jar包
-Durl: 指定需要布署到远程仓库的仓库地址(见下图<url>)
-DrepositoryId: 指定需要布署到远程仓库的仓库编号(见下图<id>)

 

 

 

 

 

maven配置阿里云仓库镜像

默认的,如果本地仓库找不到依赖的构件,这时需要东西时先到Nexus上找,如果发现Nexus服务关闭后,会自动到中央仓库找。
如果我们想覆盖中央仓库的默认地址,强制依赖的东西都到Nexus中去找,即使Nexus关闭也不会到中央工厂去下载:
修改Maven的Settings文件: 

<settings>
...
    <mirrors>
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <!--  mirrorOf的值也可以为*,代表所有的请求都到该仓库地址中去找 -->
            <mirrorOf>nexus,central</mirrorOf>
        </mirror>
    </mirrors>
...
</settings>

 

 

 如何配置才能把jar包布署到nexus上

在maven的setting.xml中配置<servers>列表节点 , 在项目的pom.xml中配置<distributionManagement>列表节点 , 具体文本参见最后配置样例 , id关联如下

 

原图地址: https://www.processon.com/view/link/5cb6e3b7e4b08b66b9aee473

 

修改nexus指向的远程仓库

Nexus默认远程仓库为https://repo1.maven.org/maven2/ ,特别慢, 可以考虑换成阿里云的 http://maven.aliyun.com/nexus/content/groups/public/

 

 参考地址: https://www.cnblogs.com/whatlonelytear/p/10725625.html

 

如何在eclipse中发布

 pom.xml文件中右击,run As – Maven build … 输入deploy -e

让每个项目不用配置settings.xml就能正常下载依赖

在pom.xml的<project>节点下配置<repositories>节点发下

<project>
...
<!-- 下载专用 , 不依赖任何其它配置-->
  <repositories>
          <repository>
              <id>nexus-releases</id>
              <name>local private nexus</name>
              <url>http://centos:8081/nexus/content/groups/public</url>
              <releases>
                  <enabled>true</enabled>
              </releases>
              <snapshots>
                  <enabled>false</enabled>
              </snapshots>
          </repository>
          <repository>
              <id>nexus-snapshots</id>
              <name>local private nexus</name>
              <url>http://centos:8081/nexus/content/groups/public</url>
              <releases>
                  <enabled>false</enabled>
              </releases>
              <snapshots>
                  <enabled>true</enabled>
              </snapshots>
          </repository>
        </repositories>
...  
</project>

当然一般情况下我们还是喜欢把repositories的配置移到setting.xml的<profile>节点中,因为每个项目都配置这个<repositories>的地址的话会比较烦索, 但是各有各好好处。

  • pom.xml中配置可以让项目随处可用.
  • setting.xml中配置可以让项目地址变动时,不用改变每个项目

 

 

nexus权限管理

给匿名用户移除查看权限

 

但是去掉后又发现 其它用户下载jar包时无法下载的问题: Could not transfer artifact com.nexmo:nexmo-sdk:pom:1.4 from/to nexus-releases (http://47.96.181.192:8081/nexus/content/groups/public): Not authorized , ReasonPhrase:Unauthorized. (20210520待解决的权限问题 , 在更高版本的nexus中好像优化了权限的配置, 会比较方便控制权限)

 

参考   Maven 私服 Nexus 权限控制【转】==》https://www.cnblogs.com/whatlonelytear/p/14849027.html

 

 

我的maven 的setting.xml配置样例

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>D:/maven/repo_centos</localRepository>
  
  <pluginGroups>
  </pluginGroups>
 
  <proxies>
  </proxies>

  <servers>
    <server>
     <!-- id名字可以任意取,但是pom.xml中的distributionManagement下的id要和本处保持一致 -->
      <id>releases</id>
      <!-- 配置发布jar包的帐号 -->
      <username>deployment</username>
      <!-- 配置发布jar包的密码 -->
      <password>deployment</password>
    </server>
    <server>
      <id>snapshots</id>
      <username>deployment</username>
      <password>deployment</password>
    </server>
  </servers>
 
  <mirrors>
  </mirrors>

  <profiles>
   
    <profile>
        <!-- id名字可以任意取,但是下面的activeProfile节点的id要和本处保持一致 -->
        <id>nexus</id>
        <repositories>
          <repository>
              <id>nexus</id>
              <name>private nexus</name>
              <!-- 统一取public暴露的地址 -->
              <url>http://centos:8081/nexus/content/groups/public</url>
              <!-- 允许releases模式下载 -->
              <releases>
                  <enabled>true</enabled>
              </releases>
              <!-- 禁止snapshots模式下载 -->
              <snapshots>
                  <enabled>false</enabled>
              </snapshots>
          </repository>
          <repository>
              <id>nexus-snapshots</id>
              <name>private nexus</name>
              <!-- 统一取public暴露的地址,如果release和snapshots要分组那就独立配置 -->
              <url>http://centos:8081/nexus/content/groups/public</url>
              <releases>
                  <enabled>false</enabled>
              </releases>
              <snapshots>
                  <enabled>true</enabled>
              </snapshots>
          </repository>
        </repositories>
        <pluginRepositories>
          <pluginRepository>
              <!-- 本处的id名字,最好和repositories的repository的id保持一致 -->
              <id>nexus</id>
              <name>private nexus</name>
              <url>http://centos:8081/nexus/content/groups/public</url>
              <releases>
                    <enabled>true</enabled>
              </releases>
              <snapshots>
                    <enabled>false</enabled>
              </snapshots>
          </pluginRepository>
          <pluginRepository>
              <!-- 本处的id名字,最好和repositories的repository的id保持一致 -->
              <id>nexus-snapshots</id>
              <name>private nexus</name>
              <url>http://centos:8081/nexus/content/groups/public</url>
              <releases>
                  <enabled>false</enabled>
              </releases>
              <snapshots>
                  <enabled>true</enabled>
              </snapshots>
          </pluginRepository>
         </pluginRepositories>
      </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>

 

我的项目中pom.xml配置样例

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo</groupId>
    <artifactId>firstdemo</artifactId>
    <version>0.0.3-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>firstdemo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>third.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.1.0.7.0</version>
        </dependency>

    </dependencies>

    <distributionManagement>

        <repository>
            <!-- 本处的id要和mavn的配置文件setting.xml中的servers下server节点的id保持一致, 因为需要用到sever配置的帐号密码才能正常发布到nexus上 -->
            <id>releases</id>
            <url>http://centos:8081/nexus/content/repositories/releases</url>
        </repository>

        <snapshotRepository>
            <!-- 本处的id要和mavn的配置文件setting.xml中的servers下server节点的id保持一致, 因为需要用到sever配置的帐号密码才能正常发布到nexus上 -->
            <id>snapshots</id>
            <url>http://centos:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>
</project>

 

这里配置了distributionManagement元素,其中的id属性的值nexus-snapshots与前面说的settings.xml中的servers元素中的配置必须一致。

配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址,

而是snapshots的地址: http://centos:8081/nexus/content/repositories/snapshots
但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到。 

 

nexus优化

 

在Nexus中增加了”remote.storage.outbound”的debug级别日志,检查了一下私服的所有对外流量,发现每个私有构件都要先到中央仓库下载,并且是20s后超时,重试3次放弃。原本基本确定了。

修改方法: 到Central仓库的Configuration中,修改HTTP Request Settings,修改Request Timeout为1s,并将Request Retry Attempts修改为0。这样可以大大降低重试的时间。

参考文章   Sonatype Nexus maven私服group仓库构件下载缓慢问题==>https://imshuai.com/sonatype-nexus-maven-group-downloading-slow

阿里云nexus仓库

https://maven.aliyun.com/mvn/view

 

 

 

 

迁移

 

nexus2迁移

如果nexus服务器是刚建的, 那么最好把仓库的jar包先从其它maven或其它nexus迁移过去,一般放到sonatype-work\nexus\storage\central 目录,再登录nexus管理界面手动更新索引,就行了

 

 

 

 

nexus3迁移

Maven私服Nexus3从windows环境迁移至Linux过程及注意事项==>https://www.likecs.com/show-204671292.html(本文说明只需要迁移sonatype-work目录所有内容即可)

nexus3安装 nexus2升级到nexus3 数据迁移==>https://blog.csdn.net/weixin_44637646/article/details/122717404

maven私库nexus2.11.4迁移升级到nexus3.12.0==>t.zoukankan.com/liangyou666-p-9439755.html

 

上面几篇文章都没有提取2.x需要最新稳定版,部分旧版是没有Upgrade:Agent选项的

 

不过升级过程遇到几个小坑,废了点时间去解决

  1. 需要先把2.x版本升级到2.x的最新稳定版,否则在Administration->Capabilities->New的页面中是没有Upgrade:Agent的选项。这个说法跟官方说明文档一致,为的是保证所有fix已经applied
  2. 做repository迁移的时候nexus2挂了,原因是out of memory,解决方式设置更大的内存上限,譬如从默认的七百多M提高到2G,在/bin/jsw/conf/wrapper.conf里设置
  3. 由于新旧nexus的repository路径有变,按照nexus 2.X版本升级 3.X版本的方法设置了nginx,把旧的路径重写为新的路径。可是有个Jenkins项目上传一个war包失败了,错误码是403, Request Entity Too Large。原因:nexus服务使用了nginx做反向代理,jar包的大小超过了nginx所允许的范围。解决方法:修改nginx.conf配置,将client_max_body_size设置为一个较大的值:
    server { 
      client_max_body_size 100M; 
      listen 8081; 
      server_name localhost; 
    .....
    }

    ————————————————
    版权声明:本小段文字描述为CSDN博主「PatrickYung」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011170540/article/details/81639779

 

 

参考

使用Nexus创建私服==>https://www.cnblogs.com/helong/articles/2254446.html    (有不少web页面配置仓库的操作)

maven学习(中)- 私服nexus搭建==>http://www.cnblogs.com/yjmyzz/p/3519373.html

Nexus私服搭建、配置、上传snapshot==>https://www.cnblogs.com/pc-boke/articles/9506522.html

Maven入门:使用Nexus搭建Maven私服及上传下载jar包==>http://www.cnblogs.com/tyhj-zxp/p/7605879.html

$Maven 本地仓库,远程仓库,中央仓库,Nexus私服,镜像 详解==>https://www.cnblogs.com/molashaonian/p/7242010.html

 

Ubuntu 用Nexus3安装配置Maven私服及常见错误==>https://blog.csdn.net/mole/article/details/120737114

 

 

Maven配置Nexus==>https://www.cnblogs.com/Mr-Wei/p/15741157.html   (加密访问,未细看)

 

posted @ 2019-04-17 12:32  苦涩泪滴  阅读(516)  评论(2)    收藏  举报