拉取最新nexus3镜像
docker pull nexus3
创建宿主机上的映射文件目录,并授权
[root@1-0002 ~]# mkdir -p /mnt/lckj/nexus/data
[root@1-0002 ~]# chmod -R +777 /mnt/lckj/nexus/data
运行redis,生成相应容器
-d 后台启动
[root@1-0002 ~]# docker run -d --name nexus3 -p 8500:8081 --restart always -v /mnt/lckj/nexus/data:/nexus-data sonatype/nexus3
查看日志,验证是否启动成功
[root@1-0002 ~]# docker logs -f nexus3
2023-02-02 01:41:24,674+0000 INFO [jetty-main-1] *SYSTEM com.softwarementors.extjs.djn.servlet.DirectJNgineServlet - Servlet GLOBAL configuration: registryConfiguratorClass=
2023-02-02 01:41:24,690+0000 INFO [jetty-main-1] *SYSTEM com.softwarementors.extjs.djn.jscodegen.CodeFileGenerator - Creating source files for APIs...
2023-02-02 01:41:24,828+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - JAX-RS RuntimeDelegate: org.sonatype.nexus.siesta.internal.resteasy.SisuResteasyProviderFactory@45aca9b
2023-02-02 01:41:24,864+0000 INFO [jetty-main-1] *SYSTEM org.jboss.resteasy.plugins.validation.i18n - RESTEASY008550: Unable to find CDI supporting ValidatorFactory. Using default ValidatorFactory
2023-02-02 01:41:25,889+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - Initialized
2023-02-02 01:41:25,896+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Initialized
2023-02-02 01:41:25,925+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.w.WebAppContext@12197923{Sonatype Nexus,/,file:///opt/sonatype/nexus/public/,AVAILABLE}
2023-02-02 01:41:25,967+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@cd6155e{HTTP/1.1, (http/1.1)}{0.0.0.0:8081}
2023-02-02 01:41:25,968+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.Server - Started @41236ms
2023-02-02 01:41:25,968+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer -
-------------------------------------------------
Started Sonatype Nexus OSS 3.37.3-02
-------------------------------------------------
nexus访问
访问http://ip:8500/,点击右上角sign in进行登录操作,默认用户名密码admin/admin123,如果不对,需要到如下路径中查找
[root@1-0002 mnt]# cat lckj/nexus/data/admin.password
34b430c2-c0e7-4705-a4d1-87914a92e5ec
[root@1-0002 mnt]#
第一次登录时,会提示修改密码,并对访问进行设置,设置为所有人访问都需要验证。
默认的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即可。
创建Blob Stores
创建proxy repository代理仓库
create repository-->select recipe【maven2 (proxy)】-->create repository:maven2(proxy),设置内容如下
name:custom_proxy
remote storage:https://maven.aliyun.com/repository/public/
Blob store:custom
create repository保存即可。
创建hosted repository仓库
create repository-->select recipe【maven2 (hosted)】-->create repository:maven2(hosted),设置内容如下
name:custom_hosted
version policy:Mixed
Blob store:custom
Deployment policy:Allow redeploy
create repository保存即可。
创建group repository仓库
create repository-->select recipe【maven2 (group)】-->create repository:maven2(group),设置内容如下
name:custom_group
Blob store:custom
Member repositories中Members按照从上至下的顺序为custom_hosted,custom_proxy,maven-central
create repository保存即可。
maven配置
复制组仓库之地,修改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://ip:8500/repository/custom_group/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
deploy部署jar包到私服
release和snapshots jar包区别
SNAPSHOT版本代表不稳定(快照版本),还在处于开发阶段,随时都会有变化。
当上传同样的版本号jar包的时候,SNAPSHOT会在版本号的后面自动追加一串新的数字,即日志标签,
nexus会根据日志标签区分出不同的版本,在maven引用时,如果使用的是snapshot版本,
重新导入maven的时候,会去私库拉取最新上传的代码。
RELEASE则代表稳定的版本(发布版本),一般上线后都会改用RELEASE版本。
也就是说1.0,2.0这样的版本只能有一个,也就是说当前版本号下,不可能出现不同的jar。
create repository-->select recipe【maven2 (hosted)】-->create repository:maven2(hosted),设置内容如下
name:custom_snapshots
version policy:Snapshot
Blob store:custom
Deployment policy:Allow redeploy
create repository保存即可。
修改custom_group配置,增加custom_snapshots
Member repositories中Members按照从上至下的顺序为custom_hosted,custom_snapshots,custom_proxy,maven-central
create repository-->select recipe【maven2 (hosted)】-->create repository:maven2(hosted),设置内容如下
name:custom_releases
version policy:releases
Blob store:custom
Deployment policy:Allow redeploy
create repository保存即可。
修改custom_group配置,增加custom_releases
Member repositories中Members按照从上至下的顺序为custom_hosted,custom_snapshots,custom_releases,custom_proxy,maven-central
项目pom.xml配置
可以在项目的pom文件中设置具体的relaeses库和snapshots库。如果当前项目的版本号的后缀名中带着-SNAPSHOT,类似<version>***-SNAPSHOT</version>,就会将项目jar包提交到snapshots库中,没有带-SNAPSHOT的话会提交releases库中。
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>custom_group</name>
<url>http://ip:8500/repository/custom_group/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>custom_group</id>
<name>custom_group</name>
<url>http://ip:8500/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>custom_releases</name>
<url>http://ip:8500/repository/custom_releases/</url>
</repository>
<snapshotRepository><!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 -->
<id>custom_snapshots</id><!-- 此处id和settings.xml的id保持一致 -->
<name>custom_snapshots</name>
<url>http://ip:8500/repository/custom_snapshots/</url>
</snapshotRepository>
</distributionManagement>
项目下执行如下命令,即可在custom_snapshots仓库中查看到当前上传的jar文件
mvn clean deploy -Dmaven.test.skip=true
问题总结
nexus/data目录一定要授权,最开始只是授权nexus,data没有授权,导致启动报错。
idea配置maven时重写了配置文件,但是默认还是查找maven中配置的setting.xml文件,导致调用的仓库地址不正确,后来同步maven中的setting.xml配置文件。
本文章参考自https://blog.csdn.net/BThinker/article/details/123688143