—START—
一、插件简介
maven-publish是一个Gradle插件,用来实现将本地library发布到Apache Maven仓库。例如:将*.aar、*.jar等library发布到仓库当中,我们可以通过gradle或者maven进行远程依赖使用它。
二、引入插件
在需要用到的模块的build.gradle文件加入如下代码即可。
apply plugin: 'maven-publish'
三、插件使用
引入插件后,我们可以扩展一些我们自定义的属性以及任务。引入插件的模块中,我们可以通过复写publishing节点做自定义操作。
pulishing 内部,我们可以复写两个配置publications 和repositories。
具体配置请参考 Gradle官网介绍
publishing {
//基本信息配置
publications {
maven(MavenPublication) {
//配置组织结构信息(这里就是配置我们依赖时,所用到的libs结构信息 implementation 'com.xxx.androidlibs:xxx:1.0.0')
groupId = 'com.xxx.androidlibs'
artifactId = 'xxx'
version = '1.0.0'
//定义输出资源源文件位置
artifact androidSourcesJar
artifact("$buildDir/outputs/aar/xxx.aar")
pom {
//libs名称
name = 'xxx'
//libs官网(一般为GitHub libs 地址)
url = 'http://www.example.com/library'
//libs描述(功能介绍)
description = 'xxx.'
//开源协议
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//libs发布者信息
developers {
developer {
id = 'xxx'
name = 'xxx'
email = 'xxx@163.com'
}
}
//libs源码仓库信息
scm {
connection = 'scm:git:git://example.com/my-library.git'
developerConnection = 'scm:git:ssh://example.com/my-library.git'
url = 'http://example.com/my-library'
}
}
}
}
//maven仓库配置
repositories {
mavenLocal()//本地仓库(默认)
maven {
//本地maven地址配置(自定义,也可以是一个maven仓库地址)
url = uri("${rootProject.projectDir}/repo")
}
}
}
task androidSourcesJar(type: Jar) {
archiveClassifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives androidSourcesJar
}
四、编译命令
执行编译命令,成功后,就会生成我们可以依赖的libs
(implementation ‘com.xxx.androidlibs:xxx:1.0.0’)
当然,你需要先在项目根目录的build.gradle配置maven仓库,即repositories {}所配置的信息。
./gradlew build publish
五、注意事项
artifact("$buildDir/outputs/aar/xxx.aar")
这里加入了这一行,他会把libs的build.gradle 下
dependencies{
api files(‘libs/libddshare.jar’)
}
使用api依赖的第三方库 一起打包到*.aar。
六、完整代码
这里使用afterEvaluate 节点包裹,保证其执行顺序,因为我们打包了 “$buildDir/outputs/aar/xxx.aar” buildDir里的资源。
apply plugin: 'maven-publish'
task androidSourcesJar(type: Jar) {
archiveClassifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives androidSourcesJar
}
afterEvaluate {
publishing {
//基本信息配置
publications {
maven(MavenPublication) {
//配置组织结构信息(这里就是配置我们依赖时,所用到的libs结构信息 implementation 'com.xxx.androidlibs:xxx:1.0.0')
groupId = 'com.xxx.androidlibs'
artifactId = 'xxx'
version = '1.0.0'
//定义输出资源源文件位置
artifact androidSourcesJar
artifact("$buildDir/outputs/aar/xxx.aar")
pom {
//libs名称
name = 'xxx'
//libs官网(一般为GitHub libs 地址)
url = 'http://www.example.com/library'
//libs描述(功能介绍)
description = 'xxx.'
//开源协议
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
//libs发布者信息
developers {
developer {
id = 'xxx'
name = 'xxx'
email = 'xxx@163.com'
}
}
//libs源码仓库信息
scm {
connection = 'scm:git:git://example.com/my-library.git'
developerConnection = 'scm:git:ssh://example.com/my-library.git'
url = 'http://example.com/my-library'
}
}
}
}
//maven仓库配置
repositories {
mavenLocal()//本地仓库(默认)
maven {
//本地maven地址配置(自定义,也可以是一个maven仓库地址)
url = uri("${rootProject.projectDir}/repo")
}
}
}
}
—END—