1: 下载Nexus 3
地址如下:
https://www.sonatype.com
这里,我下载了windwos 版本
注: Nexus 3.x 版本的运行,需要jdk1.8
解压缩后,得到:
说明:
//Nexus 运行时所需文件,例如:启动脚本等
nexus-3.13.0-01
//Nexus 生成的 配置文件,日志文件,仓库文件
sonatype-work
2: 修改端口
- [1] 配置nexus3 的本地端口的文件:
nexus-3.13.0-01-win64\sonatype-work\nexus3\etc\nexus-default.properties
- [2] 配置全局的本地端口的文件:
nexus-3.13.0-01-win64\nexus-3.13.0-01\etc\nexus-default.properties
3: Nexus3 启动
配置完成后,打开cmd或者powershell,进入nexus-3.0.1-01\bin下。
执行:nexus.exe /run
注意:命令行里的 斜杠
常用命令
1.nexus.exe /install 安装nexus为系统服务
2.nexus.exe /uninstall 卸载nexus为系统服务
3.nexus.exe /start 启动nexus服务
4.nexus.exe /stop 停止nexus服务
等待一段初始化的时间,
启动成功如下:
我们浏览器输入地址: http://localhost:9099/
注意: 这里的端口号要与我们配置的端口号统一
点击右上角的 Sign in ,即可登录,
默认用户名admin 密码:admin123
登陆后如下:
4: 上传jar到库
我们这里只采用 图形化的方式上传
首先,将自己的android-library 打包成aar,然后,在如下界面,填写相关参数,进行上传
上传结果:
5 在其他项目中依赖我们的开源库
- 5.1 Project的build.gradle
在`allprojects - repositories 节点下,新增本地maven库
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://localhost:9099/repository/maven-releases'
}
}
}
- 5.2 app的build.gradle
dependencies 节点,依赖我们需要的库
dependencies {
//依赖maven 私服的 开源库
implementation 'com.zhdelete_lib_1:lib1jar:1.0.0'
}
这些操作,就和我们依赖jcenter中的类库,或者jetpack() 的类库是一个道理的
我们尝试 调用开源类库里的方法,如下:
可以看到,我们正常的调用到了jar里的方法.
6: 上传aar到库
我们使用AS建立的android library 打包之后(build - assembleRelease),生成的是aar包,aar包的依赖较之jar包,是有些区别的
上传arr包如下:
7: 使用aar
- [1] 修改 project的build.gradle
在`allprojects - repositories 节点下,新增本地maven库
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://localhost:9099/repository/maven-releases'
}
}
}
- [2] 修改 app的build.gradle
dependencies {
//依赖maven 私服的 开源库 jar
implementation 'com.zhdelete_lib_1:lib1jar:1.0.0'
//依赖maven 私服的 开源库 aar
implementation 'com.zhdelete.android_lib:libandroid:1.0.0@aar'
}
这里的组合就是刚才填写的 graoupId:artifactId:version这里注意需要后面跟上@aar,如果不跟上这个默认是去加载.jar的文件,就会出现找不到的情况,怎么样可以不加,可以参见:Android 打包上传AAR文件到本地Maven仓库并且引用
最终,我们在自己的代码里,尝试调用aar里的内容,如下:
8: 使用gradle任务上传aar
我们修改androd-library的NexusView,新增一个testMethod
方法,以便作为android-library的1.1.0版本
public class NexusView extends View {
public NexusView(Context context) {
super(context);
}
public NexusView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public NexusView(Context context,@Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void testMethod() {
Log.d("NexusView", "testMethod invoke");
}
}
然后,在androd-library 这个module下面的build.gradle,添加如下修改:
增加maven插件
apply plugin: 'maven'
增加上传aar 的gradle task
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: 'http://127.0.0.1:9099/repository/maven-releases') {
authentication(userName: 'admin', password: 'admin123')
}
pom.project {
//版本名称
version '1.1.0'
//groupId 和 artifactId 要与服务器上面统一,方能实现版本更新
artifactId 'libandroid'
groupId 'com.zhdelete.android_lib'
packaging 'aar'
//更新描述
description 'update version 1.1.0 add new method'
}
}
}
}
最终,module的build.gradle如下:
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'maven'
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: 'http://127.0.0.1:9099/repository/maven-releases') {
authentication(userName: 'admin', password: 'admin123')
}
pom.project {
//版本名称
version '1.1.0'
//groupId 和 artifactId 要与服务器上面统一,方能实现版本更新
artifactId 'libandroid'
groupId 'com.zhdelete.android_lib'
packaging 'aar'
//更新描述
description 'update version 1.1.0 add new method'
}
}
}
}
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
repositories {
mavenCentral()
}
接着,我们重新同步一下项目,就会在gradle tab下发现新的uploadArchives 这个task了
我们点击运行这个task,就会成功的把新版本 上传到maven库了:
更多关于gradle maven插件 详情查看 Maven Plugin
然后,我们去引用这个库的项目的build.gradle,修改依赖为
dependencies {
//依赖maven 私服的 开源库 jar
implementation 'com.zhdelete_lib_1:lib1jar:1.0.0'
//依赖maven 私服的 开源库 aar
implementation 'com.zhdelete.android_lib:libandroid:1.1.0'
}
此时,我们就不需要添加@aar
也能成功使用了,我们同步一下项目看看结果:
小结:
简要的步骤如下:
1.安装maven管理的一个工具nexus
2.制作AAR
3.网站上传AAR
4.代码上传AAR
本文参考:
1: 使用 Sonatype Nexus 3 搭建 Maven 私服、本地私有 Maven 仓库,Gradle 打包 jar 、arr 后自动上传到 Nexus Maven 仓库配置
2: maven使用nexus3.3在windows下搭建私服
3: Android 打包上传AAR文件到本地Maven仓库并且引用