软件和安装环境
[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: 包含应用相关的构件和插件
[hadoop@jed bin]$ ./nexus start
Starting nexus
# 使用 nexus run 也会启动 nexus,区别在于:start以守护线程方式启动,run以非守护线程方式启动
[hadoop@jed bin]$ ./nexus status
nexus is running.
http://ip:8081/
看到以上页面说明 nexus 启动正常。
其他命令说明:
# 重启
nexus restart
# 强制重新刷新仓库
nexus force-reload
[hadoop@jed bin]$ ./nexus stop
Shutting down nexus
Stopped.
[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
# 后面改为你自己的用户名
run_as_user="hadoop"
# 这一行是注释的,释放掉,后面写JAVA_HOME的路径
INSTALL4J_JAVA_HOME_OVERRIDE=/opt/apps/jdk1.8.0_172
[hadoop@jed bin]$ sudo ln -s $NEXUS_HOME/bin/nexus /etc/init.d/nexus
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用法
cd /etc/init.d
sudo update-rc.d nexus defaults
sudo service nexus start
# 在/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
Maven可以直接从宿主仓库下载构件,也可以从代理仓库下载构件,代理仓库会间接的从远程仓库下载并缓存构件,为了方便,maven也可以从仓库组下载构件,而仓库组没有实际内容,它会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。
登录Nexus Web UI,管理员默认账户密码为admin/admin123
查看内置的仓库
nexus 3.13 自带的部分仓库的说明:
退出系统,用新创建的用户登录(账户hadoop/密码hadoop)
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>
项目中的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
<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>
<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用户是可以的)
你可以在nexus界面上配置一些周期性执行的后台任务来维护nexus,以下为nexus 3.13 支持的后台任务的部分说明:
接下来以发布仓库的索引文件为例来演示怎么调度task
可以看到,新创建的task在等待执行:
到达设置的时间后,task开始执行,状态为running:
当任务运行完成后,刚才那条task就会消失(因为刚才的task设置只执行一次),需要注意的是,这里生成的索引文件,并不是被代理的仓库中的所有构件的索引,也就是说,这个任务并没有生成maven中央仓库中所有构件的索引,而是nexus仓库中已经存在的构件的索引
最后,关于更多nexus 3.x 的使用和配置的细节可以去Nexus 3 的官方文档中学习