Android 使用Nexus应该知道的一些问题
相信很多公司都有自己的maven服务器,平时我们都是把一些常用的类库上传到自己的maven服务器上面.因为很多都是公司写好的,直接上传就行了.很少有人去关心整体的流程,今天我们就整体的从流程上分析一下.
本文知识点:
- Nexus的安装;
- Nexus的基本使用;
- 使用中遇到的一些问题.
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我会在后面讲.
上面几个红色的位置都是必填的字段.
- File -> 文件路径
- Extension -> 文件格式 aar或者jar
关于上下的GroupID,ArtifactID,Version我会在后面解释.
2.2 android studio通过代码上传代码到nexus中(这个也是本文的重点)
这个问题是比较难受的一个东西,因为需要配置很多东西.
2.2.1 创建maven
然后按照上面的信息填写就行了.
这里下面的内容要尤为注意:
- 选择release和snapshot
这里release相当于正式版本,snapshot相当于临时版本(适用于版本还在开发的时候)
- 版本可否重复上传
这里的重复上传是指相同的版本是否可以重复上传
别的我也没有什么特殊的设置了.
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 中了,所以会依赖不成功.