Maven Publish PluginでAndroid Libraryのソースコードを公開する


概要

Maven Publish Plugin で Android Library のソースコードを添付する方法です。

build.gradle.kts(差分のみ)

以下、既に Maven Publish Plugin を利用している場合向けの、差分のみを示したコードです。
※ 各値は自身の環境に合わせてください

build.gradle.kts
tasks {
    val androidSourcesJar by creating(Jar::class) {
        archiveClassifier.set("sources")
        from(android.sourceSets["main"].java.srcDirs)
    }
}

afterEvaluate {
    publishing {
        publications {
            create<MavenPublication>("maven") {
                artifact(tasks["androidSourcesJar"])
            }
        }
    }
}

build.gradle.kts

build.gradle.kts の全体像のサンプルです。

plugins {
    id("com.android.library")
    kotlin("android")
    id("kotlin-android-extensions")
    kotlin("kapt")
    `maven-publish`
}

android {
    compileSdkVersion(29)

    defaultConfig {
        minSdkVersion(23)
        targetSdkVersion(29)
        versionCode = 1
        versionName = "1.0"
        consumerProguardFiles("consumer-rules.pro")
    }

    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }

    buildFeatures {
        dataBinding = true
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

tasks {
    val androidSourcesJar by creating(Jar::class) {
        archiveClassifier.set("sources")
        from(android.sourceSets["main"].java.srcDirs)
    }
}

dependencies {
    implementation(project(":kotlin"))
    implementation("androidx.constraintlayout:constraintlayout:1.1.3")
}

afterEvaluate {
    publishing {
        publications {
            create<MavenPublication>("maven") {
                from(components["release"])
                artifact(tasks["androidSourcesJar"])
                groupId = "com.example"
                artifactId = "lib-android"
                version = "0.0.1-SNAPSHOT"
            }
        }
    }
}

実行

◆ mavenLocalにpublishする

./gradlew publishMavenPublicationToMavenLocal

◆ 任意のフォルダにpublishする

任意のフォルダを指定する差分
afterEvaluate {
    publishing {
        repositories.maven {
            // $projectDir だとモジュールの build 直下。
            // $rootDir なら root モジュール直下
            url = uri("$projectDir/repo")
        }
    }
./gradlew publishMavenPublicationToMavenRepository

./gradlew publish を利用すると余計なファイル群が生成されてしまって原因調査にちょっとハマった、、、。