Linux下使用Nexus创建maven私服


软件和安装环境

  • nexus安装包
    下载地址:https://www.sonatype.com/oss-thank-you-tar.gz
    我这里使用nexus-3.13.0-01(写本文时的最新版)
  • JDK 1.8+

1. 安装nexus

  • 设置当前用户可以打开的文件总数为65536
[hadoop@jed etc]$ sudo vim /etc/security/limits.conf

#在文件中添加以下内容,其中hadoop是用户名
hadoop - nofile 65536
  • 解压安装包
    目录说明:
bin: 包含nexus的启动脚本以及启动相关的配置文件,例如通过bin/nexus.vmoptions文件,你可以配置一些JVM参数和日志存放位置等配置
etc: 包含应用级别的配置文件
lib: 包含 Apache Karaf 相关的jar包
public: 包含应用相关的公共资源
system: 包含应用相关的构件和插件
  • 进入bin目录下,启动nexus
[hadoop@jed bin]$ ./nexus start
Starting nexus

# 使用 nexus run 也会启动 nexus,区别在于:start以守护线程方式启动,run以非守护线程方式启动
  • 查看nexus状态
[hadoop@jed bin]$ ./nexus status
nexus is running.
  • 访问Web UI
http://ip:8081/
Linux下使用Nexus创建maven私服_第1张图片

看到以上页面说明 nexus 启动正常。

其他命令说明:

# 重启
nexus restart
# 强制重新刷新仓库
nexus force-reload

2. 配置 nexus 以服务的形式启动,并且开机自启动

(0) 准备工作

  • 关闭之前手动开启的nexus进程
[hadoop@jed bin]$ ./nexus stop
Shutting down nexus
Stopped.
  • 配置环境变量,添加NEXUS_HOME
[hadoop@jed nexus-3.13.0-01]$ vim ~/.bash_profile

export NEXUS_HOME=/opt/apps/nexus-3.13.0-01
export PATH=$PATH:$NEXUS_HOME/bin

[hadoop@jed nexus-3.13.0-01]$ source ~/.bash_profile
  • 修改$NEXUS_HOME/bin/nexus.rc
# 后面改为你自己的用户名
run_as_user="hadoop"
  • 修改$NEXUS_HOME/bin/nexus
# 这一行是注释的,释放掉,后面写JAVA_HOME的路径
INSTALL4J_JAVA_HOME_OVERRIDE=/opt/apps/jdk1.8.0_172
  • 做一个$NEXUS_HOME/bin/nexus到/etc/init.d/nexus的软连接
[hadoop@jed bin]$ sudo ln -s $NEXUS_HOME/bin/nexus /etc/init.d/nexus

(1) 方法一:使用chkconfig

cd /etc/init.d
## 添加nexus服务
sudo chkconfig --add nexus
## 设置在3、4、5这3个系统运行级别的时候自动开启nexus服务
sudo chkconfig --levels 345 nexus on
## 启动nexus服务
sudo service nexus start

关于系统运行级别以及chkconfig命令的用法参考Linux的运行级别和chkconfig用法

(2) 方法二:使用update-rc.d

cd /etc/init.d
sudo update-rc.d nexus defaults
sudo service nexus start

(3) 方法三:使用systemd(CentOS-7推荐使用)

# 在/etc/systemd/system/下新建文件nexus.service
[hadoop@jed nexus-3.13.0-01]$ touch /etc/systemd/system/nexus.service
# 编辑该文件,内容如下(你可能需要适当修改)
[hadoop@jed nexus-3.13.0-01]$ sudo vim /etc/systemd/system/nexus.service

[Unit]
Description=nexus service
After=network.target
 
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/apps/nexus-3.13.0-01/bin/nexus start
ExecStop=/opt/apps/nexus-3.13.0-01/bin/nexus stop
User=hadoop
Restart=on-abort
 
[Install]
WantedBy=multi-user.target

[hadoop@jed nexus-3.13.0-01]$ sudo systemctl daemon-reload
[hadoop@jed nexus-3.13.0-01]$ sudo systemctl enable nexus.service
[hadoop@jed nexus-3.13.0-01]$ sudo systemctl start nexus.service

3. Nexus仓库的分类

Linux下使用Nexus创建maven私服_第2张图片

Maven可以直接从宿主仓库下载构件,也可以从代理仓库下载构件,代理仓库会间接的从远程仓库下载并缓存构件,为了方便,maven也可以从仓库组下载构件,而仓库组没有实际内容,它会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。

登录Nexus Web UI,管理员默认账户密码为admin/admin123

Linux下使用Nexus创建maven私服_第3张图片

查看内置的仓库

Linux下使用Nexus创建maven私服_第4张图片

nexus 3.13 自带的部分仓库的说明:

  • maven-central:代理仓库,该仓库代理Maven中央仓库,策略为release,因此只会下载和缓存中央仓库中的发布版本的构件。
  • maven-releases: 宿主仓库,策略为release,用来部署组织内部的发布版本的构件。
  • maven-snapshots:宿主仓库,策略为snapshots,用来部署组织内部的快照版本的构件。
  • maven-public:仓库组,包含了以上3个仓库

4. Nexus 操作

(1) 创建用户

Linux下使用Nexus创建maven私服_第5张图片
Linux下使用Nexus创建maven私服_第6张图片
Linux下使用Nexus创建maven私服_第7张图片
Linux下使用Nexus创建maven私服_第8张图片

退出系统,用新创建的用户登录(账户hadoop/密码hadoop)

(2) 创建宿主仓库

Linux下使用Nexus创建maven私服_第9张图片
Linux下使用Nexus创建maven私服_第10张图片
Linux下使用Nexus创建maven私服_第11张图片
Linux下使用Nexus创建maven私服_第12张图片

(2) 创建代理仓库

Linux下使用Nexus创建maven私服_第13张图片
Linux下使用Nexus创建maven私服_第14张图片
Linux下使用Nexus创建maven私服_第15张图片
Linux下使用Nexus创建maven私服_第16张图片
Linux下使用Nexus创建maven私服_第17张图片

(3) 创建仓库组

Linux下使用Nexus创建maven私服_第18张图片

(4) 配置maven从Nexus下载构件

pom如下:


    
        nexus
        nexus
        http://jed:8081/repository/hadoop-test-repository-group/
        
            true
        
        
            false
        
    



    
        nexus
        nexus
        http://jed:8081/repository/hadoop-test-repository-group/
        
            true
        
        
            false
        
    

你可以从nexus页面上获得仓库的url


Linux下使用Nexus创建maven私服_第19张图片

在pom中的id、name不需要与仓库中的对应,但url一定要一样,在pom中,多个仓库的id一定是不同的,例如下配置了多个仓库,那么这些仓库的id一定要不同,但是下可以共用一个仓库。

以上配置只在当前的项目中生效,如果想让你本地的所有的maven项目都去自定义的私服下载构件,需要在settings.xml中配置如下:


    
        
            
                
                    nexus
                    nexus
                    http://jed:8081/repository/hadoop-test-repository-group/
                    
                        true
                    
                    
                        false
                    
                
            
            
                
                    nexus
                    nexus
                    http://jed:8081/repository/hadoop-test-repository-group/
                    
                        true
                    
                    
                        false
                    
                
            
        
    
    
    
        nexus
    

在profile中配置的私服确实可以作用于本地所有的maven项目,但是maven除了会去私服中下载构件,也会去maven中央仓库中下载,如果我们想要配置maven的下载请求仅仅通过nexus,以全面发挥私服的作用,这就需要在级别添加配置了(在profile配置的基础上再在mirror上添加配置),settings.xml中的内容如下:


    
        nexus
        http://jed:8081/repository/hadoop-test-repository-group/
        
        *
    

(5) 部署构件到nexus

项目中的pom配置如下:


    
        nexus-releases
        nexus-releases
        http://jed:8081/repository/hadoop-hosted-test-repository/
    
    
        nexus-snapshot
        nexus-snapshot
        http://jed:8081/repository/hadoop-hosted-test-repository-snapshots/
    

这里设置了两个仓库,一个用于部署发布版构件,一个用于部署快照版构件,用于部署快照版构件的仓库我们在之前演示创建仓库的时候没有创建,你需要自己创建一个,另外无论是部署快照版构件还是部署发布版构件,都是需要部署到宿主类型的仓库中,而我们之前配置的下载构件的仓库是一个仓库组,这里需要注意一下。

另外,nexus仓库对于匿名用户是只读的,所以还需要在settings.xml中配置认证信息,如下:


    
      nexus-releases
      hadoop
      hadoop
    
    
      nexus-snapshot
      hadoop
      hadoop
    

然后在项目根目录下执行maven命令mvn deploy即可,如果想在任意路径下部署某个已经打好的jar包,完整的maven命令如下:

mvn deploy:deploy-file \
-DgroupId=your.group.id \
-DartifactId=your.artifact.id \
-Dversion=1.0.0 \
-Dpackaging=jar \
-Dfile=/path/to/your-jar-1.0.0.jar \
-Durl=http://ip:port/your/repository/url\ 
-DrepositoryId=yourRepositoryId

除了使用 maven 命令,还可以使用nexus WEB 界面来手动上传第三方jar包:

Linux下使用Nexus创建maven私服_第20张图片
image.png
Linux下使用Nexus创建maven私服_第21张图片
Linux下使用Nexus创建maven私服_第22张图片

(6) 为项目分配独立的仓库

  • 假设项目名称为bonc,新建两个宿主仓库bonc-releases和bonc-snapshots分别用于部署bonc项目的发布版构件和快照版构件,过程不再赘述
Linux下使用Nexus创建maven私服_第23张图片
  • 创建用于管理这两个仓库的权限(这里只演示为bonc-releases仓库创建权限)
Linux下使用Nexus创建maven私服_第24张图片
Linux下使用Nexus创建maven私服_第25张图片
Linux下使用Nexus创建maven私服_第26张图片
  • 创建一个角色bonc-role,添加这两个权限
Linux下使用Nexus创建maven私服_第27张图片
Linux下使用Nexus创建maven私服_第28张图片
  • 创建一个用户,赋予bonc-role角色
Linux下使用Nexus创建maven私服_第29张图片
  • 在pom中配置部署构件的仓库

    
        bonc-releases
        bonc-releases
        http://jed:8081/repository/bonc-releases/
    
    
        bonc-snapshots
        bonc-snapshots
        http://jed:8081/repository/bonc-snapshots/
    

  • 在 settings.xml中配置认证信息

    
      bonc-releases
      bonc
      bonc
    
    
      bonc-snapshots
      bonc
      bonc
    

这样就能把bonc项目的构件发布到专属的两个仓库中,而其他用户(没有设置管理这两个仓库权限或角色的用户)是不能部署构件到这两个仓库中的,当然了系统级别的用户(admin和上文创建的hadoop用户是可以的)

(7) nexus的调度任务

你可以在nexus界面上配置一些周期性执行的后台任务来维护nexus,以下为nexus 3.13 支持的后台任务的部分说明:

Linux下使用Nexus创建maven私服_第30张图片

接下来以发布仓库的索引文件为例来演示怎么调度task

Linux下使用Nexus创建maven私服_第31张图片
Linux下使用Nexus创建maven私服_第32张图片
Linux下使用Nexus创建maven私服_第33张图片

可以看到,新创建的task在等待执行:


到达设置的时间后,task开始执行,状态为running:


当任务运行完成后,刚才那条task就会消失(因为刚才的task设置只执行一次),需要注意的是,这里生成的索引文件,并不是被代理的仓库中的所有构件的索引,也就是说,这个任务并没有生成maven中央仓库中所有构件的索引,而是nexus仓库中已经存在的构件的索引

最后,关于更多nexus 3.x 的使用和配置的细节可以去Nexus 3 的官方文档中学习

你可能感兴趣的:(Linux下使用Nexus创建maven私服)