我想发布一个带有源代码的库。
我的库项目结构
: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)
}
在
行出现错误from(android.sourceSets["release"].kotlin.srcDirs)
我如何获得对所有源集(kotlin + java)的引用,如果不是那么只有kotlin?
AGP版本:7.1.0-beta01
我想出的解决办法是
kotlin.sourceSets["main"].kotlin.srcDirs
用于发布kotlin源代码。如果您需要对一个变体进行多个源的组合,您将需要执行类似
的操作kotlin.sourceSets["main"].kotlin.srcDirs + kotlin.sourceSets["debug"].kotlin.srcDirs
最终输出
tasks.register("androidReleaseSourcesJar", Jar::class) {
archiveClassifier.set("sources")
from(kotlin.sourceSets["main"].kotlin.srcDirs)
}
在AGP上验证:7.1.0-beta01 &Gradle: 7.3.3
我不确定这是否是Gradle Kotlin DSL中的错误。但是我们做了下面的工作来访问Kotlin源目录:
val kotlinSrcDirs = (android.sourceSets["release"].kotlin.srcDirs() as com.android.build.gradle.internal.api.DefaultAndroidSourceDirectorySet).srcDirs