专栏首页Jed的技术阶梯Linux下使用Nexus创建maven私服

Linux下使用Nexus创建maven私服


软件和安装环境


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/

看到以上页面说明 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仓库的分类

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

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

查看内置的仓库

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

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

4. Nexus 操作

(1) 创建用户

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

(2) 创建宿主仓库

(2) 创建代理仓库

(3) 创建仓库组

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

pom如下:

<repositories>
    <repository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://jed:8081/repository/hadoop-test-repository-group/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://jed:8081/repository/hadoop-test-repository-group/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

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

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

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

<settings>
    <profiles>
        <profile>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>nexus</name>
                    <url>http://jed:8081/repository/hadoop-test-repository-group/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>nexus</name>
                    <url>http://jed:8081/repository/hadoop-test-repository-group/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>

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

<mirrors>
    <mirror>
        <id>nexus</id>
        <url>http://jed:8081/repository/hadoop-test-repository-group/</url>
        <!-- * 代表这个私服可以作为所有远程仓库的镜像 -->
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

(5) 部署构件到nexus

项目中的pom配置如下:

<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>nexus-releases</name>
        <url>http://jed:8081/repository/hadoop-hosted-test-repository/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshot</id>
        <name>nexus-snapshot</name>
        <url>http://jed:8081/repository/hadoop-hosted-test-repository-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

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

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

<servers>
    <server>
      <id>nexus-releases</id>
      <username>hadoop</username>
      <password>hadoop</password>
    </server>
    <server>
      <id>nexus-snapshot</id>
      <username>hadoop</username>
      <password>hadoop</password>
    </server>
</servers>

然后在项目根目录下执行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包:

image.png

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

  • 假设项目名称为bonc,新建两个宿主仓库bonc-releases和bonc-snapshots分别用于部署bonc项目的发布版构件和快照版构件,过程不再赘述
  • 创建用于管理这两个仓库的权限(这里只演示为bonc-releases仓库创建权限)
  • 创建一个角色bonc-role,添加这两个权限
  • 创建一个用户,赋予bonc-role角色
  • 在pom中配置部署构件的仓库
<distributionManagement>
    <repository>
        <id>bonc-releases</id>
        <name>bonc-releases</name>
        <url>http://jed:8081/repository/bonc-releases/</url>
    </repository>
    <snapshotRepository>
        <id>bonc-snapshots</id>
        <name>bonc-snapshots</name>
        <url>http://jed:8081/repository/bonc-snapshots/</url>
    </snapshotRepository>
</distributionManagement>
  • 在 settings.xml中配置认证信息
<servers>
    <server>
      <id>bonc-releases</id>
      <username>bonc</username>
      <password>bonc</password>
    </server>
    <server>
      <id>bonc-snapshots</id>
      <username>bonc</username>
      <password>bonc</password>
    </server>
</servers>

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

(7) nexus的调度任务

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kafka 主题管理 API

    以下是一个操作Kafka Topic 的工具类,其中方法设计到:创建主题、删除主题、修改主题配置、删除出题配置、增加分区、分区副本重分配、获取主题元数据以及打印...

    CoderJed
  • 003.CM大数据平台实践之HDFS升级为高可用

    CoderJed
  • Kafka 新版消费者 API(四):优雅的退出消费者程序、多线程消费者以及独立消费者

    KafkaConsumer是非线程安全的,多线程需要处理好线程同步,多线程的实现方式有多种,这里介绍一种:每个线程各自实例化一个KakfaConsumer对象,...

    CoderJed
  • [教程]CentOS 下以systemd的服务来部署Nexus

    机器:CentOS 7 系统的小鸡,至少4G内存 ,2核心(这些配置是nexus官方的需求。)

    用户2353021
  • Linux 下迁移 Nexus3

    tips:我的 nexus3 整体目录有 13G,直接通过 tmux 使用 scp 命令远程复制到目标服务器的。

    叨叨软件测试
  • nexus 2.X版本升级 3.X版本

    Nexus版本是2.X , 开发需要使用新特性,进行升级,通过查询官网发现,需要升级到2.X特定版本,才能升级到3.X的对应版本.

    py3study
  • Maven使用教程二:nexus私服搭建及使用

    1.打开命令行,切换到nexus-3.2.1-01/bin目录下,回车。例:C:\Nexus\nexus-3.2.1-01\bin 2.输入:nexus.ex...

    一枝花算不算浪漫
  • Nexus 3.11配置LDAP

    https://help.sonatype.com/rep... 根据系统选择需要下载的 nexus 版本 - 配置JDK环境变量

    笨兔儿
  • Maven精选系列--私库搭建及使用

    为什么要使用私库 maven默认去远程中央仓库下载JAR包的,访问国外网络相当慢,如果团队每个人都去下载一遍无疑是网络的浪费,当然也可以添加国内的镜像,如阿里的...

    Java技术栈
  • urllib异常处理

    urllib的error模块定义了由 request模块产生的异常。如果出现了问题,request 模块便会抛出error模块中定义的异常。

    py3study

扫码关注云+社区

领取腾讯云代金券