В настоящее время у меня есть конфигурация для всех задач gradle в центральном файле build.gradle.kts. Поскольку этот файл будет слишком длинным, я планирую перенести по крайней мере некоторые задачи в их собственные файлы.
В настоящее время мой build.gradle.kts выглядит примерно так:
import org.asciidoctor.gradle.jvm.AsciidoctorTask
val revDate = System.getenv()["revdate"] ?: SimpleDateFormat("yyyy-MM-dd").format(Date())
val revNumber = System.getenv()["revnumber"] ?: "DEV-Version"
plugins {
...
id("org.asciidoctor.jvm.convert") version "3.1.0"
...
}
tasks.withType<AsciidoctorTask>().configureEach {
setSourceDir(file("src/docs"))
setOutputDir(file("$buildDir/docs"))
attributes(
mapOf(
"source-highlighter" to "rouge",
"toc" to "left",
"toclevels" to 2,
"idprefix" to "",
"idseparator" to "-",
"revnumber" to "$revNumber",
"revdate" to "$revDate"
)
)
}
Приведенный выше build.gradle.kts генерирует мою документацию при вызове asciidoctor-Tasks. Теперь я попытался внедрить приведенную выше конфигурацию, используя
apply {
from("gradle/asciidoctor.gradle.kts")
}
внутри build.gradle.kts и, кроме того, определяя используемый выше файл:
#gradle/asciidoctor.gradle.kts
import org.asciidoctor.gradle.jvm.AsciidoctorTask
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath("org.asciidoctor:asciidoctor-gradle-jvm:3.1.0")
}
}
apply{
plugin("org.asciidoctor.jvm.convert")
}
tasks.withType<AsciidoctorTask>().configureEach {
setSourceDir(file("src/docs"))
setOutputDir(file("$buildDir/docs"))
attributes(
mapOf(
"source-highlighter" to "rouge",
"toc" to "left",
"toclevels" to 2,
"idprefix" to "",
"idseparator" to "-",
"revnumber" to "$project.revNumber",
"revdate" to "$project.revDate"
)
)
}
К сожалению, это работает некорректно и дает мне исключение, что плагин с данным идентификатором ('org.asciidoctor.jvm.convert') не найден.
Я использую Gradle 6.6.1.
Что я упускаю, что мне делать по-другому?
В включенном сценарии вы получаете только среду по умолчанию. У вас нет доступа к плагинам, которые применяются в основном файле проекта, и вы не можете применять какие-либо дополнительные плагины. Это отличается от Groovy DSL, и это невозможно обойти.
Вместо этого вы должны поместить эту логику в buildSrc. Gradle Kotlin предлагает предварительно скомпилированные плагины сценариев, которые упрощают эту задачу. Вы создаете файл buildSrc/src/main/kotlin/my-plugin.gradle.kts
и добавляете туда тот же код, что и во включенном скрипте.
Затем в своем проекте вы можете добавить это в блок плагинов:
plugins {
`my-plugin`
}
Кроме того, buildSrc/build.gradle.kts
должен содержать:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
gradlePluginPortal()
}
Для получения дополнительной информации см. документацию по Gradle.
Спасибо, я только что исправил ошибки в своем ответе.
Большое спасибо :-) my-plugin.gradle.kts должен быть в buildSrc/src/main/kotlin, и мне пришлось добавить gradlePluginPortal() в репозитории. Кроме того, это сработало как шарм.