gpt4 book ai didi

Gradle Kotlin DSL : get sourceSet of another project

转载 作者:行者123 更新时间:2023-12-01 05:52:00 28 4
gpt4 key购买 nike

目前,我们正在尝试迁移我们现有的 build.gradle脚本到新的 Kotlin DSL。现在,我们正在为 jar 苦苦挣扎。任务配置。

我们的项目是一个简单的多项目。假设我们有 CorePluginPlugin使用来自 Core 的类.现在,在 build 时 Plugin ,目标 jar 应包含来自 Core 的任何使用过的类.

这是以前的样子:

jar {
from sourceSets.main.output
from project(':Core').sourceSets.main.output
}

这是我们使用 Kotlin DSL 的当前解决方案:
val jar: Jar by tasks
jar.apply {
from(java.sourceSets["main"].allSource)
from(project(":Core").the<SourceSetContainer>()["main"].allSource)
}

然而,上面的例子只是给了我一个 Extension of type 'SourceSetContainer' does not exist. Currently registered extension types: [ExtraPropertiesExtension]错误。我还尝试了我发现的其他代码片段,但到目前为止它们都没有工作。

我也试过这个(就像在第一个答案中建议的那样):
val jar: Jar by tasks
jar.apply {
from(java.sourceSets["main"].allSource)
from(project(":Core").sourceSets.getByName("main").allSource)
}

但随后 IDE(以及 jar 任务)认为 sourceSets不可用: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public val KotlinJvmProjectExtension.sourceSets: NamedDomainObjectContainer<DefaultKotlinSourceSet> defined in org.gradle.kotlin.dsl .

我希望有人可以帮助我们,因为花费数小时进行配置而不是编写任何有用的代码是非常令人沮丧的。

非常感谢您提前。

最佳答案

您可以访问 SourceSetContainer经过

project(":Core").extensions.getByType(SourceSetContainer::class)

好像 <T : Any> Project.the(extensionType: KClass<T>): T看起来在 convention项目,而 val Project.sourceSets: SourceSetContainer get()看起来在 extensions ExtensionContaier反而。这有点奇怪,因为 the 的文档说“返回指定类型的插件约定或扩展。”

请注意,您可能需要在 gradle.projectsEvaluated 中进行 sourceSet 操作。 , 因为否则如果尚未评估相应的项目,则可能尚未配置有问题的 sourceSet。

关于Gradle Kotlin DSL : get sourceSet of another project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com