Sonatype Nexus是一种特殊的远程仓库,是架设在局域网内的仓库管理器。 nexus 可以搭建局域网maven私服仓库(实现局域网用户共享),并且支持代理广域网上的远程仓库。nexus具备强大的仓库管理功能,构件搜索功能等。
好处:作为公共maven仓库的 专用代理服务器、为maven项目部署 提供存储库
理解:
没有配置 nexus 之前(没有搭建私服),如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器, 有了私服本地项目首先去本地仓库找 jar,如果没有找到则连接私服从私服下载 jar 包,如果私服没有 jar 包私服同时作为代理服务器从中央仓库下载 jar 包,这样做的好处是一方面由私服对公司项目的依赖 jar 包统一管理,一方面提高下载速度, 项目连接私服下载 jar 包的速度要比项目连接中央仓库的速度快的多。
市面上的仓库管理器:
下载地址:
Nexus Repository Manager 2 OSS:https://help.sonatype.com/repomanager2/download
使用说明文档:https://help.sonatype.com/repomanager2/installing-and-running
安装卸载nexus
注:以管理员身份安装;路径不要有中文
启动停止nexus服务
值得注意:
1.Sonatype组织 在$nexus-2.14.21-02\bin\jsw下内置了适应各操作系统的"安装、卸载、启动、停止"脚本,可以直接执行脚本实现 安装卸载启动停止nexus
2.nexus启动脚本支持常用的服务命令:install、uninstall、start、stop、restart、status、console(控制台)和dump(转储)
访问: http://localhost:8081/nexus/
注:IP端口号从nexus配置文件 conf/nexus.properties修改查看,默认本机:8081
登录log In:(账号admin,密码admin123 ,登录后可修改管理员密码)
默认有三个用户:
admin:默认密码为admin123(最高管理员)
deployment:默认密码为deployment123(拥有发布权限,可以登录上nexus删除jar)
anonymous: 免登录用户,可以在nexus界面上查看 jar包
nexus 的仓库有 4 种类型:
![image.png](https://img-blog.csdnimg.cn/img_convert/df1153de1a86f9fc50d03099242017b8.png#clientId=u7341e2c8-f825-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=253&id=ub325f87f&margin=[object Object]&name=image.png&originHeight=253&originWidth=298&originalType=binary&ratio=1&rotation=0&showTitle=false&size=38971&status=done&style=none&taskId=uf4075a46-693f-4da6-8d51-244adb68625&title=&width=298)
用Maven发布项目到OSSRH和中央仓库教程:https://central.sonatype.org/publish/publish-maven/
这里只演示发布到OSSRH,不演示发布到中央仓库(Nexus Staging Maven 插件实现一键部署到OSSRH和中央仓库)
安装maven环境,在maven配置文件(settings.xml)中,添加如下配置:
<server>
<id>releasesid>
<username>adminusername>
<password>admin123password>
server>
<server>
<id>snapshotsid>
<username>adminusername>
<password>admin123password>
server>
在项目的pom.xml 增加Nexus仓库访问路径 配置
如下 仓库的访问路径配置可以在Nexus中仓库Summary复制(!!要先登录!!)
注意: pom.xml 的 和 上述settings.xml 是对应的,都是Nexus仓库id!
<distributionManagement>
<repository>
<id>releasesid>
<url>http://localhost:8081/nexus/content/repositories/releases/url>
repository>
<snapshotRepository>
<id>snapshotsid>
<url>http://localhost:8081/nexus/content/repositories/snapshots/url>
snapshotRepository>
distributionManagement>
方式一:在pom.xml中设置version
方式二:通过Maven版本插件设置版本mvn versions:set -DnewVersion=1.2.3
也可以使用maven多环境配置的profile指定发布到哪个仓库,然后mvn clean deploy -P releases(即是profileId)
<profile>
<id>releasesid>
<repositories>
<repository>
<id>releasesid>
<url>http://localhost:8081/nexus/content/repositories/releases/url>
<releases><enabled>trueenabled>releases>
<snapshots><enabled>trueenabled>snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>publicid>
<name>Public Repositoriesname>
<url>http://localhost:8081/nexus/content/groups/public/url>
<releases><enabled>trueenabled>releases>
<snapshots><enabled>trueenabled>snapshots>
pluginRepository>
pluginRepositories>
profile>
当项目引入依赖时,依赖获取顺序:本地仓库–>私服仓库–>远程中央仓库
附:Nexus整合maven:https://help.sonatype.com/repomanager2/maven-and-other-build-tools/apache-maven
在maven配置文件(setting.xml)中配置私服仓库:
<settings>
<mirrors>
<mirror>
<id>nexusid>
<url>http://localhost:8081/nexus/content/groups/publicurl>
<mirrorOf>*mirrorOf>
mirror>
mirrors>
<profile>
<id>devid>
<repositories>
<repository>
<id>publicid>
<url>http://localhost:8081/nexus/content/groups/public/url>
<releases><enabled>trueenabled>releases>
<snapshots><enabled>trueenabled>snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>publicid>
<name>Public Repositoriesname>
<url>http://localhost:8081/nexus/content/groups/public/url>
<releases><enabled>trueenabled>releases>
<snapshots><enabled>trueenabled>snapshots>
pluginRepository>
pluginRepositories>
profile>
<activeProfiles>
<activeProfile>devactiveProfile>
activeProfiles>
settings>
Maven已经把中央仓库交给Nexus管理,Nexus Repository Manager也默认代理中央仓库
Nexus默认是关闭远程中央仓库索引的,手动开启下载索引,即可浏览或搜索远程中央仓库的组件详细坐标等信息;也可以手动配置想要代理的远程中央仓库,步骤如下:
在Nexus功能面板左侧,点击 Views/Repositories–>repositories–>Type=proxy的都是Nexus代理的中央仓库。在其Configuration标签下做远程仓库相关配置:
Remote Storage Location 远程中央仓库访问地址
Default local Storage Location默认本地存储路径(可以把本地maven仓库的所有jar包通过XFTP上传到里面,再save)
Download Remote Indexes = true 开启下载远程中央仓库的索引坐标
目标:把第三方jar包导入本地仓库、私服仓库
mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile=fastjson-1.1.37.jar -Dpackaging=jar
在maven配置文件中(setting.xml),配置第三方 仓库的server信息
<server>
<id>thirdpartyid>
<username>adminusername>
<password>admin123password>
server>
cmd进入jar包所在位置,执行如下maven安装命令
mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dpackaging=jar -Dfile=fastjson-1.1.37.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
-DgroupId 和 -DartifactId 构成了该 jar 包在 pom.xml 的坐标,项目就是依靠这两个属性定位。自己起名字也行。
Dfile 表示需要上传的 jar 包的绝对路径。
Durl 私服上仓库的位置,打开 nexus——>repositories 菜单,可以看到该路径。
DrepositoryId 服务器的表示 id,在 nexus 的 configuration 可以看到。
Dversion 表示版本信息。
关于 jar 包准确的版本:
包的名字上一般会带版本号,如果没有那可以解压该包,会发现一个叫 MANIFEST.MF 的文件
这个文件就有描述该包的版本信息。
比如 Specification-Version: 2.2 可以知道该包的版本了。
上传成功后,在 nexus 界面点击 3rd party 仓库可以看到这包。
![image.png](https://img-blog.csdnimg.cn/img_convert/de77208a61a027e00a2ba1a511670ce5.png#clientId=u36f786fd-0fe4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=903&id=u253b437c&margin=[object Object]&name=image.png&originHeight=903&originWidth=1398&originalType=binary&ratio=1&rotation=0&showTitle=false&size=145239&status=done&style=none&taskId=u0e0a92a7-cd23-40cd-a463-a9e269148db&title=&width=1398)
这些批量导入第三方jar包,maven中央仓库中存在的jar会自动创建索引;导入自建jar不会创建索引,无法根据maven坐标下载依赖,不过可以在nexus控制台手动导入并写上索引
方式一:直接拷贝文件到nexus工作目录sonatype-work\nexus\storage\指定宿主仓库下(推荐!)
#!/bin/bash
# 复制该脚本到 需要上传的仓库的根目录
# 该脚本会排除自己不上传到nexus,所以脚本命名需要注意(也可以修改脚本命令)
# timer start
start=$(date +%s)
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
# timer end
end=$(date +%s)
take=$(( end - start ))
echo execute finish!
echo ${take} seconds.
命令:./mavenimport.sh -u admin -p admin123 -r 仓库访问地址
示例:./mavenimport.sh -u admin -p admin123 -r http://localhost:8081/nexus/content/repositories/thirdparty
引用来源:https://blog.csdn.net/ouyang_peng/article/details/78796215?utm_term=dump%20nexus&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-78796215&spm=3001.4430
Nexus安装后的重要目录结构说明
nexus主目录 | nexus-2.14.21-02 | conf/nexus.properties里面有sonatype-work的地址 |
---|---|---|
工作目录 | sonatype-work | nexus/conf/nexus.xml里面有storage的地址 |
存储目录 | storage | 里面主要是nexus管理的jar包等 |
迁移过程不难,只需要打包-备份、拉取-启动即可:这里拿linux系统演示(window很简单不做演示)
_命令:tar -zcvf 目标文件名 源文件 _
示例:tar -zcvf sonatype-work-Beifen.tar.gz ./sonatype-work
scp 源用户名@IP地址:文件完整路径 本地用户名@IP地址:完整文件名
确认是否连接?
输入连接 源文件所在服务器的密码
附:
本地的用户名@IP地址可以不写,直接写个文件路径即可
可能有用的几个参数 :
-v 和大多数 linux 命令中的-v意思一样,用来显示进度,可以用来查看连接,认证,或是配置错误
-C 使能压缩选项
-P 选择端口 . 注意 -p 已经被 rcp 使用
-4 强行使用 IPV4 地址
-6 强行使用 IPV6 地址
为什么要运行在反向代理后?
Nexus Repository Manager是一个复杂的服务器应用程序,具有web应用程序用户界面,使用高性能的servlet容器Eclipse Jetty15响应HTTP请求。 组织有时需要在反向代理后运行像Nexus Repository Manager Pro或Nexus Repository Manager OSS这样的应用程序。理由包括:
如何配置反向代理?
Repository Manager有两个可能影响反向代理的内置配置属性,建议进行修改完善:
提供两种方式配置反向代理:
Apache httpd
ProxyRequests Off
ProxyPreserveHost On
ServerName www.example.com
ServerAdmin [email protected]
ProxyPass /nexus http://localhost:8081/nexus
ProxyPassReverse /nexus http://localhost:8081/nexus
ErrorLog logs/www.example.com/nexus/error.log
CustomLog logs/www.example.com/nexus/access.log common
nginx
http {
proxy_send_timeout 120;
proxy_read_timeout 300;
proxy_buffering off;
proxy_request_buffering off;
keepalive_timeout 5 5;
tcp_nodelay on;
server {
listen *:80;
server_name www.example.com;
# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;
# optimize downloading files larger than 1G - refer to nginx doc before adjusting
#proxy_max_temp_file_size 2G;
location /nexus {
proxy_pass http://localhost:8081/nexus;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}