4

maven 私服:nexus3 的搭建与使用

 1 year ago
source link: https://maxqiu.com/article/detail/146
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

maven 私服:nexus3 的搭建与使用

麦克斯仇 Think different
maven 私服:nexus3 的搭建与使用

2022/11/03  Java  Linux  Maven  Docker

官方文档:Repository Manager 3

参考教程:

下文介绍了两种安装方式,宿主机安装Docker环境安装

宿主机安装(CentOS7)

nexus 需要运行在 jdk1.8 环境下,安装 jdk 可以参考:CentOS7配置jdk

在官方文档中按如下顺序点击:Product Information -> Download -> Download Archives - Repository Manager 3

点击 Unix archive 后面的下载链接进行下载并上传

  1. # 解压
  2. tar -zxf nexus-3.42.0-01-unix.tar.gz
  3. # 移动程序目录到指定文件夹并重命名
  4. mv nexus-3.42.0-01 /usr/local/nexus
  5. # 移动工作目录到指定文件夹
  6. mv sonatype-work/ /usr/local/
  7. # 删除压缩包
  8. rm -rf nexus-3.42.0-01-unix.tar.gz

创建用户并修改文件夹所有者

文件夹权限

  1. # 创建用户
  2. useradd -r nexus
  3. # 修改文件夹所有者
  4. chown -R nexus:nexus /usr/local/nexus/ /usr/local/sonatype-work/

修改 nexus.rc 中的运行者

  1. vim /usr/local/nexus/bin/nexus.rc

删除注释符并填写运行者,最终内容如下

  1. run_as_user="nexus"

安装为服务

编写服务文件

  1. vim /usr/lib/systemd/system/nexus.service
  1. [Unit]
  2. Description=nexus service
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. LimitNOFILE=65536
  7. ExecStart=/usr/local/nexus/bin/nexus start
  8. ExecStop=/usr/local/nexus/bin/nexus stop
  9. User=nexus
  10. Restart=on-abort
  11. TimeoutSec=600
  12. [Install]
  13. WantedBy=multi-user.target

设置开机自启并启动

  1. # 重新加载服务文件
  2. systemctl daemon-reload
  3. # 开启自启
  4. systemctl enable nexus.service
  5. # 服务启动
  6. systemctl start nexus.service

查看启动状态

  1. # 跟踪日志
  2. tail -f /usr/local/sonatype-work/nexus3/log/nexus.log

出现 Started Sonatype Nexus OSS 3.42.0-01 即代表启动成功

Docker 环境安装

  1. # 拉取镜像
  2. docker pull sonatype/nexus3:3.42.0
  3. # 创建数据文件夹并修改权限(此处数据文件夹可自定义)
  4. mkdir -p /work/nexus/data && chown -R 200 /work/nexus/data
  5. # 启动
  6. docker run -d --restart always --name nexus -v /work/nexus/data:/nexus-data -p 8081:8081 sonatype/nexus3:3.42.0

查看启动状态

  1. # 跟踪日志
  2. docker logs -f nexus

出现 Started Sonatype Nexus OSS 3.42.0-01 即代表启动成功

nexus 配置

初始化管理员

  1. 浏览器打开网页,默认端口为 8081
  2. 点击右上角 Sign in 登录
    • 用户名为 admin
    • 初始密码在数据目录下的 admin.password 文件中,使用 cat 命令查看即可,例如:
      • 宿主机安装时: cat /usr/local/sonatype-work/nexus3/admin.password
      • Docker 安装时: cat /work/nexus/data/admin.password
  3. 根据页面提示,输入新的管理员密码
  4. 选择 Enable anonymous access 允许匿名访问

登录后,默认在 Welcome 页面,点击页面左侧的 Browse 即可看到现有的仓库,列表中有如下字段

  • Name:名称
  • Type:类型,有如下三种
    • proxy:这是代理方式,用来代理中央仓库,例如依赖的包在本地仓库没有,就会到私服获取,私服没有的话,会到中央仓库先把包下载到这里,然后再下载到本地仓库;
    • hosted:指的是公司或团队内部的包,并且 hosted 类型的仓库会分为 releasessnapshots ,前者是正式版,后者开发测试版;
    • group:它的目的就是把多个仓库组合起来,然后项目中只需要配置上这个类型的仓库地址,就可以把它里面组合的几个仓库都关联上。
  • Format:格式, nexus 不仅可以做 maven 私服,还可以做其他的,例如 npmyum
  • Status:状态
  • URL:仓库访问地址,点击 copy 按钮,就可以获取地址

点击页面上方导航栏内的 设置(小齿轮) 按钮,即可进入系统管理菜单,主要使用以下功能

  • Repository:仓库。管理存储位置、具体仓库等
  • Security :安全。管理用户、角色、权限等

这里只需要用到两个功能

  • Repositories :仓库。管理具体的仓库
  • Blob Stores :存储。配置本地或远程存储位置

点击 Blob Stores 进入管理,页面字段如下

  • NAME :仓库名称
  • TYPE :存储类型。一般为 File 本地存储
  • STATE :状态
  • BLOB COUNT : 文件统计。不知道统计的是文件数量还是啥
  • TOTAL SIZE :总文件大小
  • AVAILABLE SPACE : 剩余可用空间

默认的 default 可以直接使用。

如何新建存储?

  1. 点击右上角 Create Blob Store 开始创建
  2. Tpye 类型选择 File ,即本地存储。 S3 类型的暂时不知道咋用
  3. Name 存储名称自定义输入,建议纯小写字母
  4. Soft Quota 存储空间配额,暂时无需配置,若配置后有如下选项
    1. Constraint Type 约束类型,可选以下配置
      • Space Remaining 剩余空间
      • Space Used 使用空间
    2. Constraint Limit (in MB) 限制(单位:MB)
  • 默认的 nuget 仓库没啥作用,可以点击进行编辑,然后选择左上角 Delete repository 删除
  • 默认的 maven 仓库也有点问题,全部删除,然后根据下面的教程重新创建

如何新建仓库?

创建以下仓库时,在 Storage(存储) 选项下有两个通用的步骤,一定要配置!

  1. 如果有多个存储库,在 Blob store: 下面的下拉框中指定存储库(一般选择同一个库)
  2. Strict Content Type Validation: 严格的内容类型验证的下面取消勾选 Validate that all content uploaded to this repository is of a MIME type appropriate for the repository format 验证上传到此存储库的所有内容是否具有与存储库格式相适应的MIME类型

开始创建仓库

  1. 创建代理仓库
    1. 点击 Create repository 创建仓库
    2. 选择 maven2 (proxy) 类型
    3. Name 名称处填写仓库名称。例如:maven-aliyun
    4. Version policy: 下面的下拉框中选择 Mixed 混合
    5. Remote storage: 远程仓库地址填入国内 maven 镜像地址,例如阿里源 https://maven.aliyun.com/repository/public
    6. 其他保持默认,点击页面最下方的 Create repository 完成创建
  2. 创建内部正式仓库
    1. 点击 Create repository 创建仓库
    2. 选择 maven2 (hosted) 类型
    3. Name 名称处填写仓库名称。例如:max-maven-releases
    4. 点击 Create repository 完成创建
  3. 创建内部快照仓库
    1. 点击 Create repository 创建仓库
    2. 选择 maven2 (hosted) 类型
    3. Name 名称处填写仓库名称。例如:max-maven-snapshots
    4. Version policy: 下面的下拉框中选择 Snapshot 快照
    5. 点击 Create repository 完成创建
  4. 创建组合仓库
    1. 点击 Create repository 创建仓库
    2. 选择 maven2 (group) 类型
    3. Name 名称处填写仓库名称。例如:max-maven-public
    4. Version policy: 下面的下拉框中选择 Mixed 混合
    5. Member repositories: 成员仓库的筛选框中将上文创建的三个仓库移动到右侧,并调整成员的顺序
      一般情况下,内部证书仓库第一,内部快照仓库第二,代理仓库放在最后
    6. 点击 Create repository 完成创建

主要用于创建用户授予权限等操作,还没摸索明白

目前已知的功能是:创建两个用户,授予不同的仓库权限,一个用户(如组长)仅允许发布正式仓库,一个用户(如组员)仅允许发布快照仓库

PS:不知道怎么配,权限角色很多,挺烦的,懒得弄了,后面有时间更新

nexus 使用

完成上文额配置后,就可以在本地使用这个私服了

使用私服代理仓库

  1. 打开本地 mavensettings.xml 配置文件
  2. <mirrors></mirrors> 标签内插入如下内容,其中 id 可以自定义。如果已配置其他镜像地址,需要删掉,只保留私服的地址
    1. <mirror>
    2. <id>max-maven-public</id>
    3. <mirrorOf>*</mirrorOf>
    4. <url></url>
    5. </mirror>
  3. 打开 nexusbrowse 仓库浏览页面,点击组合仓库的 copy 按钮,在弹出的窗口内复制地址,并粘贴到上文的 url 标签内,最终示例如下
    1. <mirror>
    2. <id>max-maven-public</id>
    3. <mirrorOf>*</mirrorOf>
    4. <url>http://192.168.220.101:8081/repository/max-maven-public/</url>
    5. </mirror>
  4. 测试可用性
    1. 将本地 mavenrepository 仓库文件夹删除(可以先压缩备份一下)
    2. 随便找一个可用的项目,在 cmd 界面中执行 mvn clean package 打包命令
    3. 观察文件的下载地址,如果显示为私服地址(例如 Downloading from max-maven-public: http://192.168.220.101:8081/repository/max-maven-public/)且能够正常打包,即配置正常
    4. 也可以打开 nexusbrowse 仓库浏览页面,点击代理仓库,查看文件内容
  5. ideaeclipse 等开发工具的 maven 设置中,使用该 settings.xml 文件即可

使用私服内部仓库

发布 jar 包

本地 maven 配置

  1. 打开本地 mavensettings.xml 配置文件
  2. <servers></servers> 标签内配置如下内容,其中 id 可以自定义,用户名密码是 nexus 的用户名密码
    1. <server>
    2. <id>max-nexus</id>
    3. <username>admin</username>
    4. <password>123</password>
    5. </server>
  1. 打开需要 发布 jar 包的项目的 pom.xml
  2. 添加 发布配置源码打包插件 ,完整的示例如下

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.maxqiu</groupId>
    7. <artifactId>test</artifactId>
    8. <!-- 如果要上传到正式仓库,不能以 -SNAPSHOT 结尾 -->
    9. <!-- 如果要上传到快照仓库,必须以 -SNAPSHOT 结尾,且必须大写,也不能缺少 - 符号 -->
    10. <version>1.0-SNAPSHOT</version>
    11. <properties>
    12. <!-- 修改 mvn 编译的默认编码 -->
    13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    14. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    15. </properties>
    16. <!-- 发布配置 -->
    17. <distributionManagement>
    18. <!-- 正式仓库 -->
    19. <repository>
    20. <!-- 配置在 setting.xml 中 servers 标签下的 server 的 id -->
    21. <id>max-nexus</id>
    22. <!-- 正式仓库地址 -->
    23. <url>http://192.168.220.101:8081/repository/max-maven-releases/</url>
    24. </repository>
    25. <!-- 快照仓库 -->
    26. <snapshotRepository>
    27. <!-- 配置在 setting.xml 中 servers 标签下的 server 的 id -->
    28. <id>max-nexus</id>
    29. <!-- 正式仓库地址 -->
    30. <url>http://192.168.220.101:8081/repository/max-maven-snapshots/</url>
    31. </snapshotRepository>
    32. </distributionManagement>
    33. <build>
    34. <plugins>
    35. <!-- 源码打包插件 -->
    36. <plugin>
    37. <groupId>org.apache.maven.plugins</groupId>
    38. <artifactId>maven-source-plugin</artifactId>
    39. <version>3.2.1</version>
    40. <executions>
    41. <execution>
    42. <id>attach-sources</id>
    43. <phase>verify</phase>
    44. <goals>
    45. <goal>jar-no-fork</goal>
    46. </goals>
    47. </execution>
    48. </executions>
    49. </plugin>
    50. </plugins>
    51. </build>
    52. </project>
  3. 执行 mvn clean deploy 发布,即可上传
  4. 打开 nexusBrowse 仓库浏览页面,点击内部正式仓库或内裤快照仓库,查看文件内容,或者点击 Search 输入关键字搜索即可
  5. 坐标说明:即 groupIdartifactIdversion ,下文简称 gav
    • 正式版:发布后,gav 坐标就是发布时当前项目的坐标,例如:
      9129a79e45834a738d90027a1e04d5a7.png
    • 快照版:发布后,version 中的 SNAPSHOT 会被以以下格式替换 yyyyMMdd.HHmmss-index ,其中 index 是自增序号,即 xxxx-yyyyMMdd.HHmmss-index ,例如:
      0c6cbddf254146b3871b0d13c69acc49.png

引入 jar 包

下载时,不需要配置 nexus 的用户名密码

  1. 打开需要 引入 jar 包的项目的 pom.xml
  2. <dependencies></dependencies> 添加对应的 gav 坐标并刷新项目即可(前提是已经配置了私服源)
  1. 默认情况下 maven 不允许下载快照版 jar 包,需要额外的配置
  2. 以下 全局指定项目 二选一即可,推荐 全局
  3. 配置完成后在引入 gav 即可, version 根据实际情况选择
    • xxxx-SNAPSHOT 时,每次刷新后会自动获取最新版
    • xxxx-yyyyMMdd.HHmmss-index 时 ,会引入指定发布时间的包

打开本地 mavensettings.xml 配置文件,添加如下内容

<profiles></profiles> 标签内添加如下内容

  1. <profile>
  2. <id>active-snapshot-profile</id>
  3. <repositories>
  4. <repository>
  5. <!-- ID随便写,但是不能没有 -->
  6. <id>snapshot</id>
  7. <!-- url 填 * 可以防止仓库地址变更,比如换服务器了 -->
  8. <url>*</url>
  9. <!-- 快照版配置 -->
  10. <snapshots>
  11. <!-- 开启快照 -->
  12. <enabled>true</enabled>
  13. <!-- 自动更新至最新版 -->
  14. <updatePolicy>always</updatePolicy>
  15. </snapshots>
  16. <!-- 如果仓库的正式版也允许重新部署(不建议),需要打开如下注释 -->
  17. <!--<releases>
  18. <enabled>true</enabled>
  19. <updatePolicy>always</updatePolicy>
  20. </releases>-->
  21. </repository>
  22. </repositories>
  23. </profile>

<settings></settings> 标签内添加如下内容(一般就跟在 profiles 标签后面)

  1. <activeProfiles>
  2. <activeProfile>active-snapshot-profile</activeProfile>
  3. </activeProfiles>

在需要 引入 jar 包的项目的 pom.xml<project></project> 添加下文的内容

  1. <repositories>
  2. <repository>
  3. <!-- ID随便写,但是不能没有 -->
  4. <id>snapshot</id>
  5. <!-- url 填 * 可以防止仓库地址变更,比如换服务器了 -->
  6. <url>*</url>
  7. <!-- 快照版配置 -->
  8. <snapshots>
  9. <!-- 开启快照 -->
  10. <enabled>true</enabled>
  11. <!-- 自动更新至最新版 -->
  12. <updatePolicy>always</updatePolicy>
  13. </snapshots>
  14. <!-- 如果仓库的正式版也允许重新部署(不建议),需要打开如下注释 -->
  15. <!--<releases>
  16. <enabled>true</enabled>
  17. <updatePolicy>always</updatePolicy>
  18. </releases>-->
  19. </repository>
  20. </repositories>

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK