网络环境
内网Linux服务器。不能访问外网
开发机器。可以访问内网Linux服务器和外网。
需求
在内网Linux服务器(192.168.0.100)上搭建nexus私服。
批量导入公司内部的全部jar包到nexus。
开发机器可以发布jar到nexus。
开发机器可以从nexus下载jar,如果nexus没有jar就去外网下载。
分析
对于需求1、2、3来说,No Problem!难点就在需求4,因为nexus所在机器无法访问外网。一般来说,我们使用私服打包的流程如下图所示:
步骤描述:
开发者在本地对项目进行打包:mvn package
如果本地仓库没有依赖的jar包,就会去公司仓库(nexus私服)下载。
如果nexus也没有对应的jar包,nexus就会去公网下载并缓存到nexus私服。
一般nexus私服都会给开个外网,最起码给开一个可以访问中央仓库的外网,但是我们这边的网络环境不是这样,我们的nexus无法访问外网,所以我们打包的时候流程如下:
缺点:nexus无法缓存从外网下载的那些jar包,每个开发者都会去外网下载,nexus仅仅只有开发者deploy上去的那些jar包。
安装
以上都是理论分析,下面是具体实现步骤,nexus官网下载地址:https://www.sonatype.com/download-oss-sonatype
官网很难下载成功,可以在我的百度网盘下载,只不过不是最新版的:https://pan.baidu.com/s/1MGS5o59eFoHFAWeavCXIug,密码:riiu
# 解压tar -zxvf nexus-3.21.1-01-unix.tar.gz
解压后会出现两个文件夹nexus-3.21.1-01
和sonatype-work
。
常用命令
# 临时启动(可以看到日志,按ctrl+c可关闭,建议第一次这样启动)./nexus-3.21.1-01/bin/nexus run# 后台启动./nexus-3.21.1-01/bin/nexus start# 重启./nexus-3.21.1-01/bin/nexus restart# 查看状态./nexus-3.21.1-01/bin/nexus status# 停止./nexus-3.21.1-01/bin/nexus stop# 其他命令Usage: nexus {start|stop|run|run-redirect|status|restart|force-reload}
几个注意事项:
启动过程相当的漫长,需要多点耐心,第一次启动建议使用./bin/nexus run可以看到启动日志,能知道到底有没有完成启动。
注意开放防火墙端口8081。
默认端口是8081,如果想修改,可以在nexus-3.21.1-01/etc/nexus-default.properties中修改。
尽量不要使用root用户启动(官方建议),可以新建一个nexus用户。
使用nexus用户启动
# 创建用户nexususeradd nexus
# 修改nexus目录权限chown -R nexus:nexus nexus-3.21.1-01chown -R nexus:nexus sonatype-work/
# 指定启动用户 nexus-3.21.1-01/bin/nexus.rcrun_as_user="nexus"
启动时不用切到nexus用户,使用root指定 ./bin/nexus start即可。
允许匿名访问
第一次访问http://192.168.0.100:8081/的时候,密码是存放在sonatype-work/admin.password中的,当我们登录后会被要求修改密码,假设密码修改为admin123。
紧接着会让我们选择是否允许匿名访问,这里要选中是,如果选错了,可以在管理界面修改:
从maven-public中移除maven-central
为什么移除?因为nexus无法访问公网,与其苦苦挣扎不如默默移除。
开发者配置
以上是nexus私服相关的配置,下面是开发者的配置,包括settings.xml和pom.xml。
settings.xml
配置servers:
<servers> <server> <id>releasesid> <username>adminusername> <password>admin123password> server> <server> <id>snapshotsid> <username>adminusername> <password>admin123password> server>servers>
配置mirrors:
<mirrors> <mirror> <id>nexuscid> <mirrorOf>*mirrorOf> <name>Nexusname> <url>http://192.168.0.100:8081/repository/maven-public/url> mirror> <mirror> <id>alimavenid> <name>aliyun mavenname> <url>http://maven.aliyun.com/nexus/content/groups/public/url> <mirrorOf>centralmirrorOf> mirror> <mirror> <id>maven centerid> <name>center mavenname> <url>https://repo1.maven.org/maven2/url> <mirrorOf>centralmirrorOf> mirror>mirrors>
经测试,如果镜像中没有对应的jar包,会从上往下依次访问镜像。
配置profiles:
<profiles> <profile> <id>jdk-1.8id> <activation> <activeByDefault>trueactiveByDefault> <jdk>1.8jdk> activation> <repositories> <repository> <id>nexusid> <name>local private nexusname> <url>http://192.168.0.100:8081/repository/maven-public/url> <releases> <enabled>trueenabled> <updatePolicy>alwaysupdatePolicy> releases> <snapshots> <enabled>trueenabled> <updatePolicy>alwaysupdatePolicy> snapshots> repository> repositories> <pluginRepositories> <pluginRepository> <id>nexusid> <name>local private nexusname> <url>http://192.168.0.100:8081/repository/maven-public/url> <releases> <enabled>trueenabled> <updatePolicy>alwaysupdatePolicy> releases> <snapshots> <enabled>trueenabled> <updatePolicy>alwaysupdatePolicy> snapshots> pluginRepository> pluginRepositories> profile>profiles>
pom.xml
如果你的jar包不被别的项目依赖,也就是说你不需要deploy的情况下是可以不配置pom.xml的
<project>
<distributionManagement><repository><id>releasesid><name>Releasesname><url>http://192.168.0.100:8081/repository/maven-releases/url>repository><snapshotRepository><id>snapshotsid><name>Snapshotsname><url>http://192.168.0.100:8081/repository/maven-snapshots/url>snapshotRepository>distributionManagement>project>