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 的官方文档中学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容