Android搭建本地Maven私服 - 上传aar/jar - 并依赖使用

1: 下载Nexus 3

地址如下:

https://www.sonatype.com

Nexus_官网下载.jpg

这里,我下载了windwos 版本

注: Nexus 3.x 版本的运行,需要jdk1.8

解压缩后,得到:

目录.jpg

说明:

//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
端口配置_1.jpg
  • [2] 配置全局的本地端口的文件:
nexus-3.13.0-01-win64\nexus-3.13.0-01\etc\nexus-default.properties
端口配置_2.jpg

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服务

等待一段初始化的时间,

启动成功如下:

run_success.jpg

我们浏览器输入地址: http://localhost:9099/

注意: 这里的端口号要与我们配置的端口号统一

点击右上角的 Sign in ,即可登录,

默认用户名admin 密码:admin123

登陆后如下:

browse.jpg

4: 上传jar到库

我们这里只采用 图形化的方式上传
首先,将自己的android-library 打包成aar,然后,在如下界面,填写相关参数,进行上传

上传.jpg

上传结果:

上传成功.jpg

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() 的类库是一个道理的

我们尝试 调用开源类库里的方法,如下:

调用.png

可以看到,我们正常的调用到了jar里的方法.

6: 上传aar到库

我们使用AS建立的android library 打包之后(build - assembleRelease),生成的是aar包,aar包的依赖较之jar包,是有些区别的

上传arr包如下:

上传aar.jpg
上传aar成功.jpg

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里的内容,如下:

aar_依赖成功.jpg

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了

aar_maven_task_upload.jpg

我们点击运行这个task,就会成功的把新版本 上传到maven库了:

maven_插件上传成功.jpg

更多关于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也能成功使用了,我们同步一下项目看看结果:

maven_插件上传_引用成功.jpg

小结:

简要的步骤如下:

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仓库并且引用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 一、Nexus的环境搭建 在网上找资料的时候,发现各版本的Nexus的文件结构差异很大,本人使用的是Nexus 3...
    我爱吃栗子啊阅读 3,894评论 1 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 繁枝容易纷纷落,嫩蕊商量细细开。 春天,是蓬勃的,是温情的,有时候,也是寂寞的。 1 昨日,“诗联协会”组织去近郊...
    简墨素心阅读 695评论 0 3
  • 和儿子一起生活。 每天早上先送他去外婆家,然后再上班,下班了再把他接回家。 日复一日,自己下班后单独带孩子。煮饭的...
    彼岸橘光阅读 177评论 0 0
  • 肤质:毛孔粗大,有痘印,夏天混油,冬天混干;加上因为懒,对于底妆的要求是遮瑕力强。 来源:淘宝店 100左右 使用...
    苏泪阅读 510评论 0 0