04.Maven学习笔记

Nexus私服搭建与核心功能

Posted by Chen Xingxu on September 2, 2020

04.Maven学习笔记–Nexus私服搭建与核心功能

知识点概要

  1. 私服的使用场景
  2. Nexus 下载安装
  3. Nexus 仓库介绍
  4. 本地远程仓库配置
  5. 发布项目至 Nexus 远程仓库
  6. 关于 SNAPSHOT (快照) 与 RELEASE (释放) 版本说明

私服使用场景

  1. 公司不能连接公网,可以用一个私服务来统一连接
  2. 公司内部 jar 组件的共享

Nexus 下载安装

Nexus 下载地址

https://help.sonatype.com/repomanager2/download

解压并设置环境变量

#解压
unzip nexus-2.14.9-01-bundle.zip
cd /etc
#备份profile文件
tar -zcvf  profile200902.tar.gz  profile
#在环境变量当中设置启动用户
vim /etc/profile
#添加profile文件。安全起见不建议使用root用户,如果使用其它用户需要加相应权限
export RUN_AS_USER=root
source /etc/profile

配置启动参数

cd ${nexusBase}/conf
#备份配置文件
tar -zcvf  nexus.properties.tar.gz  nexus.properties
#编辑配置文件
vim nexus.properties
#端口号
application-port=8081
#启动与停止Nexus
#启动
${nexusBase}/bin/nexus start
#或进入到目录执行
cd ${nexusBase}/bin
./nexus start
#停止
${nexusBase}/bin/nexus stop
#或进入到目录执行
cd ${nexusBase}/bin
./nexus stop

登录 Nexus 界面

地址:http://{ip}:8081/nexus/

用户名:admin

密码:admin123

设置开机启动(可选步骤)

cd /etc/init.d
#复制脚本
cp {nexusBase}/bin/nexus nexus
#添加系统服务
chkconfig --add nexus
#设置启动级别为345
chkconfig --levels 345 nexus on
#查看是否添加成功
chkconfig --list|grep nexus

Nexus 仓库介绍

  • 3rd party:第三方仓库。既不是本地项目,也不是 Maven 官方标准项目,比如第三方公司提供的 SDK
  • Apache Snapshots:Apache 快照仓库
  • Central:Maven 中央仓库
  • Central M1 shadow:策略为 Releases 的虚拟仓库,用来提供中央仓库中 M1 格式的发布版本的构件(现在很少使用了)
  • Releases:私有发布版本仓库
  • Snapshots:私有快照版本仓库

配置 Central 仓库的 Remote Storage Location 为国内阿里云镜像:

http://maven.aliyun.com/nexus/content/groups/public

本地远程仓库配置

在 pom 中配置远程仓库

<repositories>
    <repository>
        <id>nexus-public</id>
        <name>my nexus repository</name>
		<url>http://192.168.25.159:8081/nexus/content/groups/public/</url>
    </repository>
</repositories>

编译项目,可以看到 Maven 从 Nexus 私服中获取依赖包了:

或者在 settings.xml 文件中配置远程仓库镜像,效果一样,但作用范围广了。

<mirror>        
	<id>nexus-custom</id>
	<mirrorOf>*</mirrorOf>
	<name>Nexus custom</name>
	<url>http://192.168.25.159:8081/nexus/content/groups/public/</url>
</mirror>

mirror 相当于一个拦截器,它会拦截 Maven 对 remote repository 的相关请求,把请求里的 remote repository地址,重定向到 mirror 里配置的地址。

没有配置 mirror:

配置 mirror:

通过 help:effective-pom 查看 Maven 使用的远程仓库

结果:

<repositories>
  <repository>
    <id>nexus-public</id>
    <name>my nexus repository</name>
    <url>http://192.168.25.159:8081/nexus/content/groups/public/</url>
  </repository>
  <repository>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>Central Repository</name>
    <url>https://repo.maven.apache.org/maven2</url>
  </repository>
</repositories>
<pluginRepositories>
  <pluginRepository>
    <releases>
      <updatePolicy>never</updatePolicy>
    </releases>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>Central Repository</name>
    <url>https://repo.maven.apache.org/maven2</url>
  </pluginRepository>
</pluginRepositories>

发布项目至 Nexus 远程仓库

在 pom 中确认项目的版本是 RELEASE 还是 SNAPSHOT

<version>1.0-SNAPSHOT</version>
<version>1.1-RELEASE</version>

在 pom 中配置仓库地址

<distributionManagement>
    <repository>
        <id>nexus-release</id>
        <name>nexus release</name>
        <url>http://192.168.25.159:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshot</id>
        <name>nexus snapshot</name>
        <url>http://192.168.25.159:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

查看 Nexus 中的用户:

在 setting.xml 中设置 server

<server>
      <id>nexus-snapshot</id>
      <username>deployment</username>
      <password>deployment123</password>
</server>

<server>
      <id>nexus-release</id>
      <username>deployment</username>
      <password>deployment123</password>
</server>

注意:pom 中 repository 和 snapshotRepository 的 id 要和 server 中的 id 一一对应。

执行 deploy 命令

mvn deploy

发布成功: