文章目录
1. 安装部署
1.下载镜像
docker pull sonatype/nexus3
2.创建数据目录
mkdir -vp /opt/nexus/nexus-data && chown -R 200 /opt/nexus/nexus-data
- 启动容器
docker run -d -p 8081:8081 --name nexus --restart=always -v /opt/nexus/nexus-data:/nexus-data sonatype/nexus3
4.访问
http://ip:8081
- ip 为远程主机的 ip 地址
- 默认用户名/密码: admin/admin123
2. 使用介绍
有些公司都不提供外网给项目组人员,因此就不能使用maven
访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus
私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus
私服的电脑访问maven
的远程仓库。
如果某个IP
地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven
时,应该用Nexus架设私服。总归主要是两点:
- 自己maven私服更容易维护,公司开发从maven私服迁出jar到本地仓库更快
- 有些公司未开放外网给开发人员
2.1 创建一个用户
点击Security>Users
创建一个用户,我这里测试创建的用户/密码是:zlt/zlt
,因为后面提交本地项目jar到私服仓库会用到:
2.2 创建一个maven仓库
设置>Repository>Repositories>Create repository>maven2(hosted)创建maven项目:
注意Deployment policy一定要设置成allow redeploy
2.3 respository介绍
- proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用;
- Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里;
- Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。
2.4 提交jar到maven私服
2.4.1 配置私服仓库的账号
设置本地maven
的settings.xml
配置,在servers
标签里添加用户密码支持
<server>
<id>releases</id>
<username>zlt</username>
<password>zlt</password>
</server>
<server>
<id>snapshots</id>
<username>zlt</username>
<password>zlt</password>
</server>
2.4.2 配置发布的私服仓库地址
在项目的pom.xml
中添加远程发布的私服仓库地址
<distributionManagement>
<repository>
<id>releases</id>
<name>releases Repository</name>
<url>http://192.168.28.138:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://192.168.28.138:8081/repository/maven-snapshots/</url>
<uniqueVersion>true</uniqueVersion>
</snapshotRepository>
</distributionManagement>
必需保证server
的id
与构建项目的pom.xml
中的repository
的id
一致:
2.4.3 批量提交jar包
mvn clean deploy
maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,会覆盖老的快照版本,而在使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
2.4.4 提交某个jar
命令格式如下:
mvn deploy:deploy-file -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dfile=本地jar包路径 -DrepositoryId=releases/snapshots -Durl=仓库地址
提交到releases的例子
mvn deploy:deploy-file -DgroupId=com.zlt -DartifactId=zlt-uaa -Dversion=1.1.0 -Dpackaging=jar -Dfile=zlt-uaa.jar -Durl=http://192.168.28.138:8081/repository/maven-releases/ -DrepositoryId=releases
提交到snapshots的例子
mvn deploy:deploy-file -DgroupId=com.zlt -DartifactId=zlt-uaa -Dversion=1.1.0-SNAPSHOT -Dpackaging=jar -Dfile=zlt-uaa.jar -Durl=http://192.168.28.138:8081/repository/maven-snapshots/ -DrepositoryId=snapshots
2.5 指定maven地址下载jar包到本地
在项目的pom.xml
中添加上远程仓库地址:
<repositories>
<repository>
<id>public</id>
<name>public</name>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>http://192.168.28.138:8081/repository/maven-public/</url>
</repository>
</repositories>