В настоящее время мы пытаемся перенести существующие сценарии build.gradle
в новый DSL Kotlin. Сейчас мы боремся с конфигурацией задачи jar
.
Наш проект представляет собой простой мультипроект. Допустим, у нас Core
и Plugin
и Plugin
используются классы из Core
. Теперь при сборке 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
.
Я надеюсь, что кто-то может нам помочь, потому что очень печально тратить часы на настройку вместо того, чтобы писать какой-либо полезный код.
Заранее большое спасибо.