Nexus Maven库
# 赋予权限,不然启动会报错,无操作权限
chmod 777 nexus-data
docker run -d -p 8081:8081 --name nexus -v /srv/nexus-data:/nexus-data --restart=always sonatype/nexus3
# 进入镜像
docker exec -it nexus bash
# 查看密码,路径在登录框会提示,然后复制即可,登陆成功后会让你修改密码
cat /nexus-data/admin-password
二、Nexus仓库
1、仓库类型
Nexus有四种仓库和四种仓库类型
a、仓库
仓库名 描述
maven-central maven中央库,默认从https://repo1.maven.org/maven2/拉取jar
maven-releases 私库发行版jar
maven-snapshots 私库快照(调试版本)jar
maven-public 仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用
b、类型
类型 描述
group(仓库组类型) 用于方便开发人员自己设定的仓库
hosted(宿主类型) 内部项目的发布仓库(内部开发人员,发布上去存放的仓库)
proxy(代理类型) 从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径)
virtual(虚拟类型) 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)
2、拉取jar包流程
Maven可直接从宿主仓库下载构件,也可以从代理仓库下载构件,而代理仓库间接的从远程仓库下载并缓存构件,为了方便,Maven可以从仓库组下载构件,而仓库组并没有实际的内容(下图中用虚线表示,它会转向包含的宿主仓库或者代理仓库获得实际构件的内容)
3、创建仓库
进过上面的讲解,我们对仓库已经有了了解,接下来我们进行创建仓库,分为是代理仓库(proxy)、宿主仓库(hosted)、仓库组(group),点击主页上面的小螺丝然后在选择Repositories进入仓库管理列表,然后就可以开始创建我们的仓库啦,选择仓库类型的时候一定要选择maven2
第一种是在项目的pom.xml中进行更改,让单个项目使用nexus仓库;
代理中央仓库
只要在PMO文件中配置私服的地址即可,配置如下:
<repositories>
<repository>
<id>maven-central</id>
<name>maven-central</name>
<url>http://maven:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
maven配置setting文件
Snapshot包的管理
1)修改Maven的settings.xml文件,加入认证机制
<servers>
<server>
<id>nexus</id><!--对应项目pom文件中设置的-->
<username>admin</username>
<password>admin123</password>
</server>
</servers>
修改工程的Pom文件 要配置snapshot仓库
<distributionManagement>
<repository>
<!--ID可以随便写,但是要与maven的setting文件中一致-->
<id>releases</id>
<name>Nexus Repository</name>
<!--指向仓库类型为hosted(宿主仓库)的储存类型为Release的仓库---->
<url>http://你nexus仓库的IP:8081/repository/me-release/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Nexus Snapshot</name>
<url>http://192.168.1.14:8081/repository/maven-snapshots/</url>
</snapshotRepository>
<site>
<id>nexus</id>
<name>Nexus Sites</name>
<url>dav:http://192.168.1.14:8081/repository/maven-snapshots/</url>
</site>
</distributionManagement>
一种是通过修改maven的配置文件settings.xml进行更改,让所有项目都使用nexus仓库。
Maven 的配置文件名称为:setting.xml。它被存放在两个地方:
1)/usr/local/maven/conf/settings.xml #安装的目录;
2)~/.m2/settings.xml #用户的家目录;
如果两者都存在,他们的内容将被合并,并且用户范围的settings.xml优先。
关于settings.xml文件常用的的配置修改如下:
1)修改本地仓库存储路径,默认值是~/.m2/repository 可在settings.xml中的localrepository修改成自己需要的目录;
2)如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,需要离线模式下,设置offline属性,设置为true,默认为false;
3)修改中央仓库服务器,修改配置文件中便签,添加或修改镜像地址;
4)设置代理地址,修改配置文件中proxy标签,定义代理服务器,实现maven的代理。
拉取jar的私服仓库地址只要写我们的仓库组就ok,因为在创建这个组的时候,里面已经包含了其它三个仓库
settings.xml文件
在maven的settings文件中找到mirrors,加上我们组仓库的mirror,url填写我们创建的组地址即可,id、name可以随便填写
<!-- 配置Maven服务器的账号信息,上传需要用到 -->
<server>
<id>maven-releases</id>
<username>developer</username>
<password>developer</password>
</server>
<server>
<id>maven-snapshots</id>
<username>developer</username>
<password>developer</password>
</server>
<server>
<id>maven-public</id>
<username>developer</username>
<password>developer</password>
</server>
<!-- 使用Mirror配置节可以强制所有包请求都会被转向内网Nexus服务器的地址 -->
<mirrors>
<mirror>
<id>maven-public</id>
<name>myself nexus repository</name>
<url>http://maven:8081/repository/maven-public/</url>
<!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>maven-releases</id>
<name>myself nexus maven-releases</name>
<url>http://maven:8081/repository/maven-releases/</url>
<!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>maven-snapshots</id>
<name>myself nexus maven-snapshots</name>
<url>http://maven:8081/repository/maven-snapshots/</url>
<!--里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库-->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<!-- 这个配置决定了我们的Maven服务器开启snapshot配置,否则不能下载SNAPSHOTS的相关资源 -->
</profiles>
<profile>
<id>myconf</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://maven:8081/repository/maven-public/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enable>true</enable>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://maven:8081/repository/maven-public/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enable>true</enable>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles> 需在该标签以上进行添加!
<activeProfiles>
<activeProfile>myconf</activeProfile> 这里的值一定要和上面profile的ID对应,才可以激活
</activeProfiles>
</settings> 将 <activeProfiles>字段写在settings字段上面
需要发布jar资源到团队内部镜像服务器的项目的pom.xml配置<distributionManagement>增加snapshot的支持,
<distributionManagement>
<repository>
<id>maven-releases</id>
<name>Nexus Release Repository</name>
<url>http://maven:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://maven:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Nexus 启用上传功能
团队有了私有的镜像服务器以后,团队内部代码的依赖也就不再需要源码依赖了,大家可以通过发布不同版本的jar到nexus镜像上来供调用者直接通过Maven下载使用,这样不同研发人员直接的依赖也就没有那么强了,大家可以基于已经发布的版本进行各自的开发。
那么如何发布个人的jar资源到团队内部镜像上呢?
1. 在Nexus 中创建一个developer的角色,拥有的权利为【nx-repository-view-maven2--edit】和【nx-repository-view-maven2--add】权利,如果该角色将来可能还有nuget,npm相关上传权利,则将其权利改为【nx-repository-view-–-edit】和【nx-repository-view-–-add】权利。
2. 创建用户,用户拥有的角色为【nx-anonymous】和刚创建的【developer】角色。其中nx-anonymous角色是nexus默认自带的角色。
上传到私仓库 mvn clean deploy -U
异常处理
*UNKNOWN com.sonatype.nexus.plugins.outreach.internal.outreach.SonatypeOutreach – Could not download page bundle
org.apache.http.conn.HttpHostConnectException: Connect to sonatype-download.global.ssl.fastly.net:443 [sonatype-download.global.ssl.fastly.net/69.171.245.49] failed: 连接超时
打开【System】–》【Capabilities】,将【Outreach:Management】禁用即可。
mvn deploy