maven - 如何从非 build-gradle 文件访问 Kotlin DSL 扩展?
问题描述
org.gradle.kotlin.dsl
与like
android
或etc一起出现的 Kotlin 扩展很少publishing
。比如说,对于publishing
,扩展定义如下
fun org.gradle.api.Project.`publishing`(configure: org.gradle.api.publish.PublishingExtension.() -> Unit): Unit =
(this as org.gradle.api.plugins.ExtensionAware).extensions.configure("publishing", configure)
这意味着在我的范围内我build.gradle.kts
可以打电话
publishing {
// blablabla
}
就我而言,我有一个单独的文件来处理定义为random.gradle.kts
并位于完全随机目录中的发布。
在这里,我想访问此publishing
扩展程序但无法访问。
欢迎任何建议。
再举一个例子android
也是不可取的。在我的build.gradle.kts
我可以访问android
,但在我的random.gradle.kts
我无法做到。
android
扩展定义如下
val org.gradle.api.Project.`android`: com.android.build.gradle.LibraryExtension get() =
(this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("android") as com.android.build.gradle.LibraryExtension
事实上,LibraryExtension 也是不可访问的。
那么,如何将这些扩展传递或导入到我的random.gradle.kts
?
解决方案
//build.gradle.kts tested with gradle 6.7
subprojects {
afterEvaluate {
(extensions.findByType(com.android.build.gradle.LibraryExtension::class)
?: extensions.findByType(com.android.build.gradle.AppExtension::class))?.apply {
println("Found android subproject $name")
lintOptions.isAbortOnError = false
compileSdkVersion(30)
if (this is com.android.build.gradle.AppExtension)
println("$name is an application")
if (this is com.android.build.gradle.LibraryExtension) {
val publishing =
extensions.findByType(PublishingExtension::class.java) ?: return@afterEvaluate
val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(sourceSets.getByName("main").java.srcDirs)
}
afterEvaluate {
publishing.apply {
val projectName = name
publications {
val release by registering(MavenPublication::class) {
components.forEach {
println("Publication component: ${it.name}")
}
from(components["release"])
artifact(sourcesJar.get())
artifactId = projectName
groupId = ProjectVersions.GROUP_ID
version = ProjectVersions.VERSION_NAME
}
}
}
}
}
}
}
}
推荐阅读
- cpanel - Symfony\Component\Translation\TranslatorInterface::setLocale($locale) 的声明
- asp.net-mvc - IAuthenticationManager 不包含 GetExternalLoginInfoAsync 的定义,如何解决此问题?
- java - Gradle 依赖解决方案从 4.10.3 更改为 6.1.1
- ruby-on-rails - 方法 .save 引发 ArgumentError
- angular - 处理多个点击事件,如果所有事件都在可点击的单个 div 下
- apache-spark - 使用 spark-submit 为 Spark Job 设置 HBase 属性
- android - 无法连接到设备:NullPointerException 通过 USB 从 android 连接到 Zebra 打印机?
- sdk - 我尝试将 Apple 示例代码(FairPlay Streaming Server SDK v4.2.0)与 Fairplay 在线播放一起使用,但它不起作用
- java - Java流过滤器2级列表