Android使用Nexus应该知道的一些问题

Android 使用Nexus应该知道的一些问题

相信很多公司都有自己的maven服务器,平时我们都是把一些常用的类库上传到自己的maven服务器上面.因为很多都是公司写好的,直接上传就行了.很少有人去关心整体的流程,今天我们就整体的从流程上分析一下.

本文知识点:

  1. Nexus的安装;
  2. Nexus的基本使用;
  3. 使用中遇到的一些问题.

1. Nexus的安装

1.1 下载地址

nexus的下载地址
百度网盘(提取码: nt3q)

下载好上面的文件之后,直接解压到指定位置就好了.

1.2 安装和使用

解压到指定位置之后,然后cd到相应的bin路径.执行一下命令就算安装完成了.

//mac的命令
./nexus start
//window的命令
nexus /start
复制代码

以上命令是启动nexus,之后你就可以打开自己的浏览器,http://localhost:8081/ 就可以打开nexus了.如果是第一次的话会让你设置密码,说来这个还是挺有意思的.第一次的账号是admin,密码是sonatype-work/nexus3/admin.passwor这个文件里面的那串字符串.然后进去之后会让你更改代码.改好了记录一下就好.

图片名称

这样安装就算完成了...

2. Nexus的基本使用

其实Nexus不光能管理aar,还能管理很多东西.但是作为一名Android开发知道怎么管理aar和jar包就可以.

2.1 主动上传文件

这个平时基本上不怎么常用.不过有的时候还是需要的,能解决外部提供aar或者jar的时候,上传到自己或者公司的maven上.

图片名称

选择你要上传的maven,至于怎么创建maven我会在后面讲.

图片名称

上面几个红色的位置都是必填的字段.

  1. File -> 文件路径
  2. Extension -> 文件格式 aar或者jar

关于上下的GroupID,ArtifactID,Version我会在后面解释.

2.2 android studio通过代码上传代码到nexus中(这个也是本文的重点)

这个问题是比较难受的一个东西,因为需要配置很多东西.

2.2.1 创建maven

图片名称 图片名称

然后按照上面的信息填写就行了.

这里下面的内容要尤为注意:

  1. 选择release和snapshot

这里release相当于正式版本,snapshot相当于临时版本(适用于版本还在开发的时候)

图片名称
  1. 版本可否重复上传

这里的重复上传是指相同的版本是否可以重复上传

图片名称

别的我也没有什么特殊的设置了.

2.2.2 android项目中配置

这里还有一个坑,在Gradle7.0之前和之后android的配置有了很大的改变.所以这里会把Gradle7.0和7.0之前的配置代码都说一下.

在Android项目的build.gradle中配置maven地址
maven {
    //这个是gradle7.0之后如果使用http需要添加.
    allowInsecureProtocol = true
    url 'http://localhost:8081/repository/imooc-release/'
    credentials {
        username ''
        password ''
    }
}
复制代码

这里的用户名要填,其实可以不填的.但是需要自己在nexus上面设置.怎么设置后面说... 还有哈,这里看你的Android Studio的版本是多少. 如果版本高的话repositories应该是在settings.gradle中,两个都要设置.其实这个和mavenCentral()都是差不多的.就是多了个账号和密码.

配置相应的maven插件
7.0之前版本的配置

在模块的gradle文件中添加如下内容:

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            //配置用户名和密码
            repository(url: uri("http://localhost:8081/repository/maven-releases/")) {
                authentication(userName: 'admin', password: 'admin123')
            }
            pom.groupId = "com.angle.testlib" //随便写,但是一般为包名(这个会影响到之后引用的名称)
            pom.artifactId = "testLib" //随便写,但是一般为lib名字(这个会影响到之后引用的名称)
            pom.version = "1.0.1" //随便写,有点规律不好吗?
            pom.project {
                //设置许可证 可以不写.
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
            }
        }
    }
}
复制代码
7.0之后版本的配置
id 'maven-publish'

afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                description = pomDescription
                groupId = POM_GROUPID//随便写,但是一般为包名(这个会影响到之后引用的名称)
                artifactId = pomArtifactId//随便写,但是一般为lib名字(这个会影响到之后引用的名称)
                version = Boolean.valueOf(PUSH_VERSION_IS_SNAPSHOT) ? pomVersion + '-SNAPSHOT' : pomVersion
            }
        }

        //仓库地址配置
        repositories {
            maven {
                name getName()
                //允许使用 http
                allowInsecureProtocol = true

                //配置用户名和密码
                credentials {
                    username = NEXUS_USERNAME
                    password = NEXUS_PASSWORD
                }

                def releasesRepoUrl = NEXUS_REPOSITORY_RELEASE_URL
                def snapshotsRepoUrl = NEXUS_REPOSITORY_SNAPSHOTS_URL
                url = Boolean.valueOf(PUSH_VERSION_IS_SNAPSHOT) ? snapshotsRepoUrl : releasesRepoUrl
            }
        }

    }
}
复制代码
仓库名 作用
hosted(宿主仓库) 存放本公司开发的版本(正式版,测试版)
proxy(代理仓库) 代理中央仓库,Apache库
group(组仓库) 使用时连接组仓库,包含Hosted(宿主仓库)和Proxy(代理仓库)
图片名称

配置好了maven插件剩下的就是上传了.上传的话就比较简单了.

7.0一下的上传 图片名称

7.0以上的上传 图片名称

这样你就能在你的nexus上面看到你上传的aar了.

3. 使用中遇到的一些问题

3.1 关于密码的问题

其实密码是可以不进行设置的.这个选项就是关联相应密码的一个配置.关于密码的设置可以看看关于nexus中的密码配置参考

图片名称

3.2 http协议的仓库不安全

Gradle 7.0默认强制使用https的仓库地址,直接使用的话,会报错如下:

Could not resolve all dependencies for configuration ‘:classpath’.
Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository ‘maven(http://...:8081/repository/maven-public/)’ to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.0.2/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.
复制代码

上面注释已经说明了怎么解决.

3.3 私有仓库组件依赖不成功

这个会发生在android studio新版本.因为 allprojects {} 已经放在 settings.gradle 中了,所以会依赖不成功.

Guess you like

Origin juejin.im/post/7032921464508514318