def MAVEN_PASSWORD = 'admin123'
def MAVEN_URL = 'http://localhost:8081/repository/maven-releases/'
publishing {
publications {
uploadSDK(MavenPublication) {
groupId MAVEN_GROUPID
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp ->
if (dp.version != "unspecified") {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version)
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
repositories {
maven {
url MAVEN_URL
credentials {
username MAVEN_USERNAME
password MAVEN_PASSWORD
task publishToMaven(dependsOn: ['assemble', 'publish']) {
doLast {
println "finish publish to maven"
publishToMaven.setGroup('upload')
2.在各个lib module gradle文件中添加引用
apply from: '../upload-aar.gradle'
3. 在各个lib module gradle文件中添加“artifactId”“version”配置
因为“artifactId”“version”各个lib module都不一样,所以放在各自的gradle中配置
//maven配置
publishing {
publications {
uploadSDK(MavenPublication) {
artifact "build/outputs/aar/mylibrary1-release.aar"
artifactId "MyLibrary1"
version android.defaultConfig.versionName
4.在lib1中添加lib2的引用
因为最终app只希望有一个引用,所以在lib1的gradle中要填加如下引入,这样在生成的pom文件中会带上lib2的引用。当然你也可以把这行代码添加到app的gradle中。
implementation 'com.demo:MyLibrary2:1.0.0.0'
三.上传aar
如图点击publishToMaven,分别上传lib1,lib2
四.引用aar
1.声明maven服务器
maven {
url "http://localhost:8081/repository/maven-releases/"
credentials {
username = "admin"
password = "admin123"
}
}
2.引用aar
implementation 'com.demo:MyLibrary1:1.0.0.0'
五.常见问题
1.gradle中配置的exclude写法不正确,导致生成pom文件异常,引入的时候还需要再exclude一次。
例如:错误写法
implementation('com.facebook.fresco:animated-gif:0.14.1') {
exclude module: 'support-v4'
正确写法:
implementation('com.facebook.fresco:animated-gif:0.14.1') {
exclude group: 'com.android.support', module: 'support-v4'
今天做了一个将Module上传到Maven仓库的功能,基本上就是把以前的代码拷了一份,在此记录一下,给有需要的童鞋参考。
1.新建maven_upload.gradle
在项目根目录下,新建 maven_upload.gradle
apply plugin: 'maven'
def REPOSITORY_URL = "http://xxxx.yyyy.你的maven服务器的地址/" //TODO <--- 请修改
def NEXUS_USERNAME = "maven服务器账号" //TODO &l
博客搬迁至https://blog.wangjiegulu.com
RSS订阅:https://blog.wangjiegulu.com/feed.xml
RapidMavenPushPlugin
用于上传你的 library 库到多个 Maven 仓库的 Gradle 插件。
Github: https://github.com/wangjiegulu/RapidMavenPushPlugin
本文基于Android Studio操作,借助Gradle插件 —— Maven Publish,实现在构建完安卓库或者纯Java库之后,自动将之部署aar或jar至maven仓库,使其成为一个公共模块,供其他项目引用。
首先了解一下其他的多模块开发方法。
第一种:在setting.gradle中定义子模块然后 api Project(':...')),直接引用 。
第二种,部署至远程服务器,如 jitpack.io(傻瓜式操作,还支持gitee)
第一种方法适合小库,优点是改动后可一键构建运行,缺点是
maven 命令除了常用的几个,大部分经常记不住,整理一下,方便查询。
maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下,-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即...
1、下载Nexus
2、Nexus的安装与配置
3、Nexus 私服仓库的创建二、Android Gradle 配置远程maven 脚本 1、AndroidGradle7.0以前
1、AndroidGradle7.0以后很多小伙伴在开发Android的时候,特别是一些ToB项目中,往往要出不同的app,但是依赖的业务流程基本都是一样的,相当于多个app要依赖一个lib。为了方便维护lib,一般做法会有一下几种:而
平时开发中会把一些独立的功能模块抽取出来作为sdk,既方便业务接入,又能让其他业务线快速复用。那么我们就需要将sdk打包上传到maven仓库,让业务侧依赖即可。在上传产物到maven仓库之前,我们的知道产物到底是什么。Android Gradle插件根据项目gradle中应用不同的插件类型在编译组装后会生成不同的产物:Android项目的主工程app的gradle配置文件依赖:
因此,在通过编译命令 或后,就会在build/outputs/apk文件下生成产物:如图,apk就是产物(构件)。如果是海外市场,
在module的gradle文件中新增依赖数组变量
//工程中所有gradle aar依赖信息
ext.gradleAarDepends = ["com.example.test:test01:1.0.0","com.example.test:test02:1.0.0"]
编写发布任务
在module的gradle文件中编写发布任