在center OS7下安装nexus

环境

image.png

安装以及配置

  1. 检查jdk版本号(这里安装的是nexus3.x 需要jdk版本1.8以上),命令行中输入java -version 查看版本号

image.png

  1. 安装jdk(步骤一中未安装jdk的情况下,已安装的跳过这一步)
  1. sudo yum install java-1.8.0-openjdk.x86_64
  1. 进入opt目录
  1. cd /opt
  1. 下载最新版的nexus

    1. sudo curl -O https://sonatype-download.global.ssl.fastly.net/repository/repositoryManager/3/nexus-3.16.0-01-unix.tar.gz
  2. 解压压缩包

  1. sudo tar -xzvf nexus-3.16.0-01-unix.tar.gz
  1. 创建软链接
  1. sudo ln -s nexus-3.16.0-01
  1. 创建nexus账户
  1. sudo useradd nexus
  1. 授权
  1. sudo chown -R nexus:nexus /opt/nexus
  2. sudo chown -R nexus:nexus /opt/sonatype-work/
  1. 打开 /opt/nexus/bin/nexus.rc 文件, 去掉 run_as_user 变量的注释,将用户修改为nexus
  1. sudo vi /opt/nexus/bin/nexus.rc
  2. run_as_user="nexus"
  1. 安装服务(systemd),创建服务文件
  1. sudo vi /etc/systemd/system/nexus.service
  2. // 添加配置
  3. [Unit]
  4. Description=nexus service
  5. After=network.target
  6. [Service]
  7. Type=forking
  8. ExecStart=/opt/nexus/bin/nexus start
  9. ExecStop=/opt/nexus/bin/nexus stop
  10. User=nexus
  11. Restart=on-abort
  12. [Install]
  13. WantedBy=multi-user.target
  1. 配置添加完成后可通过以下命令对nexus服务进行操作
  1. sudo systemctl start nexus //启动nexus服务
  2. sudo systemctl restart nexus //重启nexus服务
  3. sudo systemctl stop nexus //停止nexus服务
  4. sudo systemctl status nexus //查看服务状态
  1. 安装并启动服务,查看服务状态
  1. sudo systemctl daemon-reload
  2. sudo systemctl enable nexus
  3. sudo systemctl start nexus
  4. // 查看服务状态
  5. sudo systemctl status nexus
  6. >> Loaded: loaded (/etc/systemd/system/nexus.service; enabled; vendor preset: disabled)
  7. >> Active: active (running) since 2019-04-16 19:40:12 CST; 1 day 16h ago //服务正在运行
  1. 修改配置nexus配置文件
  1. sudo vi /opt/sonatype-work/nexus3/etc/nexus.properties
  2. nexus-context-path=/nexus //修改上下文
  3. application-port=8888 //修改端口号为8888
  4. application-host=0.0.0.0 //如果对ip进行了解析,则修改为127.0.0.1
  1. 如果服务器开启了防火墙,则需要添加防火墙规则,允许直接访问相应端口

    1. sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp //上面配置的端口号
    2. sudo firewall-cmd --reload
  2. 访问nexus服务,打开http://ip:8888/,默认的账户admin,默认密码admin123,至此,nexus服务已经配置完成并成功启动

maven仓库以及用户配置

仓库管理,详细内容可以看官方文档

类型

  • hosted 本地仓库,可以部署自己的组件到这一类型的仓库。比如公司的第二方库
  • proxy 代理仓库,可以代理远程的公共仓库,如maven中央仓库,它可以将远程仓库中的内容缓存在nexus中,下次使用时直接从nuxus中加载
  • group 仓库组,可以合并多个hosted/proxy仓库,从而实现一次引入多个仓库中的组件

    版本类别

  • snapshots 格式:版本号-snapshots,版本快照,可以发布一些测试版本在这里,同一版本可以覆盖之前的版本

  • release 发布版本,一旦发布,就不可能修改,不能通过覆写来修改,只能通过version修改来迭代

    仓库管理

    在setting > Repository中可以进行仓库的管理,包括创建,修改,删除

    权限管理

    入口: setting > privileges

    权限组管理

    入口: setting > roles 可以通过创建role对权限进行组合,默认的两组规则,nx-admin:admin管理员的默认权限,最高权限,可以进行增删改仓库,用户,规则等; nx-anonymous: 匿名(未登录)用户权限,只拥有只读权限,可以下载仓库中的组件

    用户管理

    入口: setting > users ,在user组中默认存在两个用户,1: admin,默认权限组:nx-admin 2: anonymous,默认权限组:nx-anonymous,在私服中,建议新建一组禁止访问权限(不添加任何权限),并将anonymous的权限改为禁止访问权限(user必须赋予一组权限)
    建议新建两个用户以及两个用户权限组:1. 发布账户,用于发布组件到仓库中 2. 只读账户,拥有仓库只读权限,可以下载仓库中组件到本地,用于需要使用该组件的用户

    发布组件到maven仓库

  1. 新建maven发布账号,分配相关权限
  2. 在根目录的gradle.properties 中添加如下配置
  1. RELEASE_URL=http://ip:port/nexus/repository/maven-release/
  2. SNAPSHOT_URL=http://ip:port/nexus/repository/maven-snapshots/
  3. NAME=name //配置的发布账户的账号
  4. PASSWORD=password //配置的发布账号的密码
  1. 在module中新建maven_push.gradle和gradle.properties文件,目录结构如下

image.png

  1. 修改maven_push.gradle,代码如下
  1. apply plugin: 'maven'
  2. apply plugin: 'signing'
  3. configurations {
  4. deployerJars
  5. }
  6. repositories {
  7. mavenCentral()
  8. }
  9. // 判断版本是Release or Snapshots
  10. def isReleaseBuild() {
  11. return RELEASE.toBoolean()
  12. }
  13. // 获取仓库url
  14. def getRepositoryUrl() {
  15. return isReleaseBuild() ? RELEASE_URL : SNAPSHOT_URL
  16. }
  17. def getVersion() {
  18. return isReleaseBuild() ? VERSION : VERSION + '-SNAPSHOT'
  19. }
  20. uploadArchives {
  21. repositories {
  22. mavenDeployer {
  23. beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
  24. pom.version = getVersion()
  25. pom.artifactId = ARTIFACT_ID
  26. pom.groupId = GROUP_ID
  27. repository(url: getRepositoryUrl()) {
  28. authentication(userName: mavenUser, password: mavenPassword) // maven授权信息
  29. }
  30. }
  31. }
  32. }
  33. // 进行数字签名
  34. signing {
  35. // 当 发布版本 & 存在"uploadArchives"任务时,才执行
  36. required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
  37. sign configurations.archives
  38. }
  39. // type显示指定任务类型或任务, 这里指定要执行Javadoc这个task,这个task在gradle中已经定义
  40. task androidJavadocs(type: Javadoc) {
  41. // 设置源码所在的位置
  42. source = android.sourceSets.main.java.sourceFiles
  43. }
  44. // 生成javadoc.jar
  45. task androidJavadocsJar(type: Jar) {
  46. // 指定文档名称
  47. classifier = 'javadoc'
  48. from androidJavadocs.destinationDir
  49. }
  50. // 生成sources.jar
  51. task androidSourcesJar(type: Jar) {
  52. classifier = 'sources'
  53. from android.sourceSets.main.java.sourceFiles
  54. }
  55. // 产生相关配置文件的任务
  56. artifacts {
  57. archives androidSourcesJar
  58. archives androidJavadocsJar
  59. }
  1. 修改gradle.properties,增加仓库配置信息
  1. VERSION=1.0 //版本号
  2. GROUP_ID=com.example.view //包名
  3. ARTIFACT_ID=extendflexboxlayout //组件名
  4. RELEASE=true //是否为release版本
  1. 在build.gradle中引入maven_push,重载下gradle
  1. apply from: 'maven_push.gradle'
  1. 在android studio右边gradle中就可以看到相应的gradle组件了,双击uploadArchives进行发布

image.png

  1. 在maven服务器中就可以看到相应的组件库了

    使用私有maven仓库中的组件

  2. 新建maven只读账户,分配相关权限

  3. 在项目根目录的gradle.properties文件中配置只读账户的账号密码
  1. mavenUser=user
  2. mavenPassword=password
  1. 在项目根目录的gradle中配置maven仓库地址

    1. maven {
    2. url "http://ip:port/nexus/repository/maven-snapshots/"
    3. credentials {
    4. username "$mavenUser"
    5. password "$mavenPassword"
    6. }
    7. }
  2. 在需要使用组件的仓库中的gradle文件中引入相应的组件

  1. dependencies {
  2. //格式为maven仓库中的group:name:version
  3. implementation "com.example.view:extendflexboxlayout:1.0-SNAPSHOT"
  4. }
  1. enjoy it