Linux下使用Nexus搭建Maven私服
准备工作
Nexus安装包 nexus-3.16.1-02-unix.tar.gz nexus下载地址
JDK1.8 nexus3必须使用java8及以上
安装及配置
将安装包放到/usr/local/nexus下并解压
- 目录说明:
- bin:启动脚本以及启动相关的配置文件,例如通过bin/nexus.vmoptions文件,你可以配置一些JVM参数和日志存放位置等配置
- etc: 包含应用级别的配置文件
- lib: 包含 Apache Karaf 相关的jar包
- public: 包含应用相关的公共资源
- system: 包含应用相关的构件和插件
默认端口号为8081;如需修改到以下路径
记得查看防火墙端口的8081是否开启,没有的话需要开启8081端口。
修改nexus3数据以及相关日志的存储位置
设置当前用户可以打开的文件总数为65536
配置nexus以服务的形式启动,并且开机自启
配置环境变量,添加NEXUS_HOME
修改$NEXUS_HOME/bin/nexus.rc
修改$NEXUS_HOME/bin/nexus
做一个$NEXUS_HOME/bin/nexus到/etc/init.d/neuxs的软连接
使用systemd,创建自启动service
在/etc/systemd/system/下新建文件nexus.service
如需设置权限——chmod 775 nexus.service
编辑nexus.service内容
重新加载
开启nexus的service服务
运行nexus.service
查看nexus运行状态
Nexus仓库的分类
Maven可以直接从宿主仓库下载构件,也可以从代理仓库下载构件,代理仓库会间接的从远程仓库下载并缓存构件,为了方便,maven也可以从仓库组下载构件,而仓库组没有实际内容,它会转向其包含的宿主仓库或者代理仓库获得实际构件的内容。
登录Nexus Web UI
管理员默认账户密码为admin/admin123
查看内置仓库
- nexus自带的部分仓库的说明:
- maven-central:代理仓库,该仓库代理Maven中央仓库,策略为release,因此只会下载和缓存中央仓库中的发布版本的构件。
- maven-releases: 宿主仓库,策略为release,用来部署组织内部的发布版本的构件。
- maven-snapshots:宿主仓库,策略为snapshots,用来部署组织内部的快照版本的构件。
- maven-public:仓库组,包含了以上3个仓库
Nexus操作
创建用户
创建宿主仓库
创建代理仓库
创建仓库组
配置maven从Nexus下载构件
pom如下:
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.208.3:8081/repository/root-group-test-repository/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.208.3:8081/repository/root-group-test-repository/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
你可以从nexus页面上获得仓库的url
在pom中的id、name不需要与仓库中的对应,但url一定要一样,在pom中,多个仓库的id一定是不同的,例如下配置了多个仓库,那么这些仓库的id一定要不同,但是和下可以共用一个仓库
以上配置只在当前的项目中生效,如果想让你本地的所有的maven项目都去自定义的私服下载构件,需要在settings.xml中配置如下:
<profiles>
<!--添加私服-->
<profile>
<repositories>
<repository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.208.3:8081/repository/root-group-test-repository/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>nexus</name>
<url>http://192.168.208.3:8081/repository/root-group-test-repository/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--启用私服-->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
在profile中配置的私服确实可以作用于本地所有的maven项目,但是maven除了会去私服中下载构件,也会去maven中央仓库中下载,如果我们想要配置maven的下载请求仅仅通过nexus,以全面发挥私服的作用,这就需要在级别添加配置了(在profile配置的基础上再在mirror上添加配置),settings.xml中的内容如下:
<mirrors>
<mirror>
<id>nexus</id>
<url>http://192.168.208.3:8081/repository/root-group-test-repository/</url>
<!-- * 代表这个私服可以作为所有远程仓库的镜像 -->
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
部署构件到Nexus
项目中的pom配置如下
<!--部署构建到nexus-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>nexus-releases</name>
<url>http://192.168.208.3:8081/repository/root-hosted-test-repository/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshot</id>
<name>nexus-snapshot</name>
<url>http://192.168.208.3:8081/repository/root-hosted-test-repository-snapshot/</url>
</snapshotRepository>
</distributionManagement>
这里设置了两个仓库,一个用于部署发布版构件,一个用于部署快照版构件,用于部署快照版构件的仓库我们在之前演示创建仓库的时候没有创建,你需要自己创建一个,另外无论是部署快照版构件还是部署发布版构件,都是需要部署到宿主类型的仓库中,而我们之前配置的下载构件的仓库是一个仓库组,这里需要注意一下。
另外,nexus仓库对于匿名用户是只读的,所以还需要在settings.xml中配置认证信息,如下:
<servers>
<server>
<id>nexus-release</id>
<username>root</username>
<password>123456</password>
</server>
<server>
<id>nexus-snapshot</id>
<username>root</username>
<password>123456</password>
</server>
</servers>
然后在项目根目录下执行maven命令mvn deploy即可,如果想在任意路径下部署某个已经打好的jar包,完整的maven命令如下:
mvn deploy:xxxxx -DgroupId=com.test -DartifactId=nexus -Dversion=1.0.0 -Dpackaging=jar -Dfile=/path/to/mynexus-1.0.0.jar -Durl=http://192.168.283.3:8081/repository/root-hosted-test-repository\ DrepositoryId=xxx
除了使用 maven 命令,还可以使用nexus WEB 界面来手动上传第三方jar包
为项目分配独立的仓库
新建仓库
假设项目名称为devops,新建两个宿主仓库devops-releases和devops-snapshot分别用于部署devops项目的发布版构件和快照版构件,过程不再赘述
创建权限
创建用于管理这两个仓库的权限(这里只演示为devops-releases仓库创建权限)
创建角色并关联权限
创建用户,赋予角色
在pom中配置部署构件的仓库
<distributionManagement>
<repository>
<id>devops-release</id>
<name>devops-release</name>
<url>http://192.168.208.3:8081/repository/devops-release/</url>
</repository>
<snapshotRepository>
<id>devops-snapshots</id>
<name>devops-snapshots</name>
<url>http://192.168.208.3:8081/repository/devops-snapshot/</url>
</snapshotRepository>
</distributionManagement>
在 settings.xml中配置认证信息
<servers>
<server>
<id>devops-release</id>
<username>devops</username>
<password>devops</password>
</server>
<server>
<id>devops-snapshot</id>
<username>devops</username>
<password>devops</password>
</server>
</servers>
这样就能把bonc项目的构件发布到专属的两个仓库中,而其他用户(没有设置管理这两个仓库权限或角色的用户)是不能部署构件到这两个仓库中的,当然了系统级别的用户(admin和上文创建的hadoop用户是可以的)