maven-publish插件的使用笔记

卢鸿彩
2023-12-01

—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—

 类似资料: