其中前两个思路适用于少量组件需要上传的情况,若需要上传的组件成百上千个,则建议要么想办法打通网络通过网络初始化,要么使用程序循通过api批量上传。
使用有权限的账户登录 nexus 后在仓库页的左侧菜单里选择【Upload】功能上传组件,无论是maven组件还是npm组件只能上传到 hosted 类型的仓库中。
1、maven组件可上传的文件有jar、pom
2、npm组件可上传的文件是 tgz 文件
3、这个功能仅支持上传 Release 版本的依赖,nexus3 会根据上传文件的版本判断是否符合要求,比如版本号带有 SNAPSHOT 标识,则认为是快照版,不允许上传
上传maven依赖
1、同时上传 jar 和 pom 文件
分别浏览两个文件,点击 Browse 按钮,分别选择要上传的 jar 和 pom文件,当 pom 文件选择完之后,Component coordinates 区域会自动取消(即此时 nexus 自动从 pom 文件中提取相关内容)。
2、仅上传 pom 文件
当需要上传的是类似父模块的时候,这种情况不存在 jar,只有 pom 文件,选中 pom 后,Components coordinates 区域同样会自动取消。
3、仅上传 jar 文件
当仅上传 jar 文件时,需要填写 Components coordinates 对应的信息,即 Group ID、Artifact ID、Version,这种情况基本遇不到。
1、在 maven 配置文件中配置具有上传权限的用户信息,也可以给匿名用户临时赋管理员权限(这有风险,万一用完后忘了收回呢)
2、确保maven依赖的插件在本地仓库里是存在的,否则命令无法正常执行
在settings.xml中配置用户信息,用户名密码根据实际情况配置
<servers>
<server>
<id>local-nexus3</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
注意:若需要上传的 jar 、pom 文件在本地仓库里,先将文件从本地仓库复制到其他目录,否则会上传失败
1、同时上传 jar 和 pom
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.jar -DpomFile=XXX.pom
-s:指定maven使用的配置文件
-Durl:maven 仓库地址,注意仓库类型 Release、Snapshot、Mixed
-Dfile:要上传的jar文件
-DpomFile:与jar文件对应的pom文件
-DrepositoryId:仓库id,给maven工具使用的,主要是用来获取上边 server 里配置的用户信息,这个值要跟 server 里配置的 id 里的值一样
2、仅上传 pom
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.pom -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0.0-SHAPSHOT -Dpackaging=pom
--Dfile为对应的pom文件
groupId、artifactId、packaging、version的值从pom文件中复制
3、仅上传 jar
mvn -s /path/to/settings.xml deploy:deploy-file -Durl=http://localhost:8080/repository/maven-snapshots -DrepositoryId=local-nexus3 -Dfile=XXX.jar -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.0.0 -Dpackaging=jar
若上传失败,可以增加 -e 和 -X 参数,查看输出的日志信息,一般是因为缺少 maven 依赖
api接口文档在:管理员账号登录--》设置--》System--》API,组件相关接口查看Components 里的内容
自己通过程序循环调用 api 接口将依赖上传至 nexus 私服。
注意上传权限问题,在http请求头里设置Authorization:Basic[空格][用户名:密码对应的base64编码字符串],比如admin:admin123对应为YWRtaW46YWRtaW4xMjM=
注意:调用api实际使用时不能用admin:admin123去做认证,因为nexus认为admin123是admin的默认密码,默认密码验证会不通过。
附:上传程序:
https://pan.bAIdu.com/s/1kJExCa974xk_wkqYXFgd9w?pwd=akc2
1、上传程序里的日志文件要先创建
2、权限认证字符串根据实际调整
参考:
欢迎交流、指正。