一、 概要
私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。
当Maven需要下载依赖的时候,先向私服请求,如果私服上不存在该依赖,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。
image
二、优点
- 节省外网宽带
- 加速Maven依赖
- 部署第三方构件
- 提高稳定性、增强控制:原因是外网不稳定
- 降低中央仓库的负荷:原因是中央仓库访问量太大
三、搭建私服
说明
Maven私有仓库-使用docker部署Nexus
官方镜像说明
启动容器
官方说明中提到的是使用docker直接启动。我选择用docker-compose启动。
docker-compose.yml文件如下:
- vim docker-compose.yml
services: nexus: container_name: nexus-container image: sonatype/nexus3 restart: always ports: - 8081:8081 volumes: # 映射数据目录 - ./nexus3/data/:/nexus-data # 映射日志目录 - ./nexus3/log/:/nexus-data/log/
- docker-compose up -d
- docker-compose ps
注意 : 可能会出现权限问题
/nexus-data/log/karaf.log (Permission denied)
修改宿主机映射目录的权限 例如:
# 例如我的容器卷目录 /docker/docker-compose/nexus/nexus3/data
chmod -R 777 docker/docker-compose/nexus/nexus3/data
验证安装是否成功
在浏览器输入 http://127.0.0.1:8081
注意 第一次登陆的时候账号名是admin密码在在宿主机隐射的data数据卷中
image
四、访问nexus3
maven相关的仓库
- maven-central
- maven-releases
- maven-snapshots
-
maven-public
image
类型
proxy是远程仓库的代理
在nexus中配置了一个中央库的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库 下载,然后返回给用户,相当于起到一个中转的作用。
hosted是宿主仓库
用户可以把自己的一些依赖,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在中央库是获取不到的,就需要手工上传到hosted里。
group是仓库组
在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。
五、如何发布自己的构件到私有仓库中?
配置settings文件中的节点
在~/.m2/settings或者全局config/settings中增加server节点,根据需要可以添加多个server
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
在pom文件中配置插件
在项目的pom.xml/build/中配置中配置maven-deploy-plugin
<!--发布到私有仓库依赖的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
温馨提示:如果在多模块项目中,可以将不需要发布的项目配置为skip=true。比如在parent的pom.xml中增加以下内容后,所有模块都会跳过发布。
<build>
<plugins>
<!--发布到私有仓库依赖的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
配置distributionManagement
在项目的pom.xml中配置distributionManagement
<!--发布到私有仓库的配置-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>nexus releases</name>
<url>http://0.0.0.0:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>nexus snapshots</name>
<url>http://0.0.0.0:8081/repository/maven-snapshots/</url>
<uniqueVersion>false</uniqueVersion>
<layout>legacy</layout>
</snapshotRepository>
</distributionManagement>
其中repository.id指~/.m2/settings.xml中配置的server.id, 这两个是同一个概念,值要一致。
- 运行pom.xml所在目录 运行发布命令
mvn clean deploy -Dmaven.test.skip=true
六、指定使用私有仓库下载maven依赖
有两种方式,建议使用第二种方式
pom.xml文件中配置
在需要引用构件的项目中添加repository配置
<!--在项目中指定使用私有仓库或者在~/.m2/settings.xml配置全局的mirror-->
<repositories>
<repository>
<id>nexus-ielong</id>
<name>ielong Nexus Repository</name>
<url>http://0.0.0.0:18081/repository/maven-public/</url>
</repository>
</repositories>
maven中的settings配置
在~/.m2/settings中指定mirror
<mirrors>
<!--不再使用aliyun的镜像-->
<!--<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>-->
<!--使用自己的私有镜像-->
<mirror>
<id>nexus-ielong</id>
<name>nexus public group</name>
<url>http://0.0.0.0:8081/repository/maven-public/</url>
<mirrorof>*</mirrorof>
</mirror>
</mirrors>
网友评论