maven私有镜像仓库nexus部署使用
作者:正在输入中…………
1、Nexus部署
#查找镜像 docker search sonatype/nexus3 #拉取镜像 docker pull sonatype/nexus3 #持久化目录 mkdir -p /data/nexus/data chmod 777 -R /data/nexus/data #启动服务 docker run -d --name nexus3 -p 8081:8081 --restart always -v /data/nexus/data:/nexus-data sonatype/nexus3 #查看日志 docker logs -f nexus3
稍等一下,出现 Started Sonatype Nexus OSS 表示启动好了。
2、Nexus访问
安装完成后可访问管理平台:http://ip:8081,打开浏览器,访问 http://ip:8081/
admin账户登录密码查看
cat /data/nexus/data/admin.password
3、Nexus配置
默认仓库说明
maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
maven-releases:私库发行版jar,初次安装请将Deployment policy设置为Allow redeploy
maven-snapshots:私库快照(调试版本)jar
maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml或项目pom.xml中使用
Nexus仓库类型介绍
hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
proxy:代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
group:仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
4、创建Blob Stores
在创建repository之前,还需要先指定文件存储目录,便于统一管理。就需要创建Blob Stores,不创建则使用的是default
可以看到blob stores有两个,一个是系统默认的,一个是刚创建的。如果不想自己创建,使用系统默认的文件存储目录也是可以的。到时候创建repository时,存储目录选择default就可以了。新创建的目录,可以在/data/blobs/目录下面可以看到。
5、Nexus仓库
如图所示,代理仓库负责代理远程中央仓库,托管仓库负责本地资源,组资源库 = 代理资源库 + 托管资源库
6、创建proxy repository代理仓库
选择maven2(proxy),代理仓库
设置代理仓库
其他的可以采用默认,以后需要修改的可以再修改。
这里推荐几个远程仓库:
jboss的maven中央仓库地址:http://repository.jboss.com/maven2/
阿里云的maven中央仓库地址:http://maven.aliyun.com/nexus/content/groups/public/
apache的maven中央仓库地址:http://repo.maven.apache.org/maven2/
7、创建hosted repository仓库
jboss的maven中央仓库地址:http://repository.jboss.com/maven2/
阿里云的maven中央仓库地址:http://maven.aliyun.com/nexus/content/groups/public/
apache的maven中央仓库地址:http://repo.maven.apache.org/maven2/
上图的Hosted设置选项,选项中有三个值:
Allow redeploy:允许同一个版本号下重复提交代码, nexus以时间区分
Disable redeploy:不允许同一个版本号下重复提交代码
Read-Only:不允许提交任何版本原生的maven-releases库是Disable redeploy设置, maven-snapshots是Allow redeploy。
8、创建group repository组仓库
9、maven部署配置
#获取软件包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz --no-check-certificate tar -zxvf apache-maven-3.9.6-bin.tar.gz echo "" >>/etc/profile source /etc/profile mvn -V
Maven下的setting.xml文件和项目中的pom.xml文件的关系是:settting.xml文件是全局设置,而pom.xml文件是局部设置。pom.xml文件对于项目来说,是优先使用的。而pom.xml文件中如果没有配置镜像地址的话,就按照settting.xml中定义的地址去查找。
如上图方式获取组仓库smart_group的仓库地址,修改setting.xml文件如下:
<!--nexus服务器,id为组仓库name--> <servers> <server> <id>custom_group</id> <username>admin</username> <password>admin123</password> </server> </servers> <!--仓库组的url地址,id和name可以写组仓库name,mirrorOf的值设置为central--> <mirrors> <mirror> <id>custom_group</id> <name>custom_group</name> <url>http://192.168.124.189:8081/repository/custom_group/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
修改后可以重新编译项目,必须添加参数-U,(-U,–update-snapshots,强制更新releases、snapshots类型的插件或依赖库,否则maven一天只会更新一次snapshot依赖)。代理仓库会从远程中央仓库下载jar包
mvn clean compile -U
新建SpringBoot项目,可以查看本地仓库,远程仓库的下载的Jar包
这个时候可以看到代理仓库已经从中央仓库下载了项目编译需要的jar包。同样地,在组仓库中也能看到所有的jar包,包括代理仓库和宿主仓库的。
10、管理平台上传三方jar包
有些jar是第三方提供的,在中央仓库中是没有的,我们可以上传这些本地三方jar包到hosted repository宿主仓库中。
上传成功后,就可以看到hosted repository和group repository中已经有了刚上传的三方jar包
然后项目中通过编译打包就可以下载jar包到本地repository中了,记住maven clean、compile、package首次执行时加参数-U。
11、命令上传三方jar包
在setting.xml配置文件中添加hosted repository server
<!--id自定义,但是在使用命令上传的时候会用到--> <server> <id>custom_hosted</id> <username>admin</username> <password>admin123</password> </server>
使用如下命令上传jar包:
mvn deploy:deploy-file -DgroupId=byd.ghy -DartifactId=portal-auth -Dversion=1.0.0 -Dpackaging=jar -Dfile=D:\workspace_byd\workspace_ghy\workspace_portal-backend\portal-backend-jar-v2\target\auth-server.jar -Durl=http://192.168.124.189:8081/repository/custom_hosted/ -DrepositoryId=custom_hosted 命令解释: -DgroupId=byd.ghy 自定义 -DartifactId=portal-auth 自定义 -Dversion=1.0.0 自定义,三个自定义,构成pom.xml文件中的标识 -Dpackaging=jar 传的类型是jar类型 -Dfile=D:\auth-server.jar jar包的本地磁盘位置 -Durl=http://ip:8081/repository/custom_hosted/ hosted资源库的地址 -DrepositoryId=custom_hosted 需要和setting.xml文件中配置的ID一致 例如: mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=./cloudx-common-basics-2.0.2-SNAPSHOT.jar -DgroupId=com.risit.chk -DartifactId=risit-chk-common -Dversion=1.0.0-SNAPSHOT -Dpackaging=jar -DrepositoryId=nexus-snapshots -Durl=http://10.10.111.222:8081/repository/nexus-snapshots/ mvn deploy:deploy-file -Dfile=cloudx-center-2.0.2-SNAPSHOT.pom -DgroupId=com.cloudx -DartifactId=cloudx-center -Dversion=2.0.2-SNAPSHOT -Dpackaging=pom -DrepositoryId=nexus-snapshots -Durl=http://10.10.111.222:8081/repository/nexus-snapshots/
上传成功后,hosted repository中已经可以看到了
12、deploy部署jar包到私服
release和snapshots jar包区别
SNAPSHOT版本代表不稳定(快照版本),还在处于开发阶段,随时都会有变化。当上传同样的版本号jar包的时候,SNAPSHOT会在版本号的后面自动追加一串新的数字,即日志标签,nexus会根据日志标签区分出不同的版本,在maven引用时,如果使用的是snapshot版本,重新导入maven的时候,会去私库拉取最新上传的代码。
RELEASE则代表稳定的版本(发布版本),一般上线后都会改用RELEASE版本。
也就是说1.0,2.0这样的版本只能有一个,也就是说当前版本号下,不可能出现不同的jar。
创建snapshot仓库
可以在nexus上添加一个snapshot仓库,专门用于存放snapshot版本的jar包。snapshot仓库也是hosted类型的,创建方式和hosted repository类型。创建好后,加入到组仓库里面就可以了。
一定要选择Deployment Policy为allow redeploy
同样的操作,创建Release类型的仓库,并加入到组中
13、项目pom.xml文件配置
可以在项目的pom文件中设置具体的relaeses库和snapshots库。如果当前项目的版本号的后缀名中带着-SNAPSHOT,类似***-SNAPSHOT,就会将项目jar包提交到snapshots库中,没有带-SNAPSHOT的话会提交releases库中。
在pom.xml文件中配置 distributionManagement 节点如下,在项目中执行deploy命令后,jar包将会被上传到nexus中。
setting.xml中配置
<server> <id>custom_snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>custom_releases</id> <username>admin</username> <password>admin123</password> </server>
pom.xml配置
<repositories> <repository> <id>custom_group</id> <name>Nexus Repository</name> <url>http://192.168.124.189:8081/repository/custom_group/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>custom_group</id> <name>Nexus Plugin Repository</name> <url>http://192.168.124.189:8081/repository/custom_group/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> <!--项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件jar等部署到远程仓库。 --> <distributionManagement> <repository><!--部署项目产生的构件到远程仓库需要的信息 --> <id>custom_releases</id><!-- 此处id和settings.xml的id保持一致 --> <name>Nexus Release Repository</name> <url>http://192.168.124.189:8081/repository/custom_releases/</url> </repository> <snapshotRepository><!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 --> <id>custom_snapshots</id><!-- 此处id和settings.xml的id保持一致 --> <name>Nexus Snapshot Repository</name> <url>http://192.168.124.189:8081/repository/custom_snapshots/</url> </snapshotRepository> </distributionManagement>
默认地,maven编译打包不会下载SNAPSHOT版本的jar包,所以还需要在pom.xml文件中配置支持下载snapshot版本jar包。
mvn clean deploy -Dmaven.test.skip=true
至此,nexus搭建完毕,支持本地部署依赖jar包!!!
14、问题排查
1、nexus.log日志中报错内容如下:
UNKNOWN com.sonatype.nexus.plugins.outreach.internal.outreach.SonatypeOutreach - Could not download page bundle
java.net.SocketException: Network is unreachable (connect failed)
解决方法:
a) 访问Nexus管理站点,我这里是 http://192.168.124.184:8081,进入后,用管理员帐号登录。
b)点击 下图中上面的按钮,然后选择左侧Capabilities,然后点击右侧的 Outreach:Management
c)点击【disable】按钮,关闭Outreach服务
或者给Outreach设定新的URL,可以在标签页 Settings 中的 Override Outreach Content URL项中设定。Nexus支持的URL有如下三个:
- http://links.sonatype.com and https://links.sonatype.com
- http://download.sonatype.com and https://download.sonatype.com
- http://sonatype-download.global.ssl.fastly.net and https://sonatype-download.global.ssl.fastly.net
到此这篇关于maven私有镜像仓库nexus部署使用的文章就介绍到这了,更多相关maven nexus部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!