I want to publish a library with source code.
My library project structure
:library:
└── src
└── main
└── kotlin
└── <package>
└── MyLibrary.kt
gradle.kts
plugins {
...
id("maven-publish")
}
android {
...
// sourceSets{} block is not present as new AGP automatically recognises "src/main/kotlin" as kotlin source
...
}
project.afterEvaluate {
publishing {
publications {
register<MavenPublication>("release") {
groupId = mGroupId
artifactId = mArtifactId
version = mVersion
from(components["release"])
artifact(tasks.getByName("androidReleaseSourcesJar"))
}
}
}
}
tasks.register("androidReleaseSourcesJar", Jar::class) {
archiveClassifier.set("sources")
// Can't refer to `kotlin.srcDirs` but `java.srcDirs` works fine
from(android.sourceSets["release"].kotlin.srcDirs)
}
I'm getting error at line
from(android.sourceSets["release"].kotlin.srcDirs)
How do I get the reference to all the sourceSet(kotlin + java), if not then only kotlin?
AGP Version: 7.1.0-beta01
The solution I figured out was
kotlin.sourceSets["main"].kotlin.srcDirs
for publishing kotlin source. If you need to do combination of multiple source for a variant, you will need to do something like
kotlin.sourceSets["main"].kotlin.srcDirs + kotlin.sourceSets["debug"].kotlin.srcDirs
final output
tasks.register("androidReleaseSourcesJar", Jar::class) {
archiveClassifier.set("sources")
from(kotlin.sourceSets["main"].kotlin.srcDirs)
}
Verified on AGP:7.1.0-beta01 & Gradle: 7.3.3