Обновление asciidoctor.преобразовать в asciidoctor.jvm.преобразовать

#gradle #build.gradle #gradle-kotlin-dsl #asciidoctor

Вопрос:

Я пытаюсь обновить asciidoctor, так как старый больше не поддерживается в gradle версии 7. Проблема в том, что я не уверен, как обновить его из моего текущего кода gradle kotlin. (Я нашел только один пример с groovy). Код gradle, который у меня есть в настоящее время, выглядит примерно следующим образом:

 plugins {
    id("org.asciidoctor.convert") version "2.4.0"
    ....
    kotlin("jvm") version "1.5.0"
    kotlin("plugin.spring") version "1.5.0"
}

....

repositories {
    mavenCentral()
    maven { url = uri("https://repo.spring.io/milestone") }
    maven { url = uri("https://repo.spring.io/snapshot") }
    jcenter()
}

dependencies {
    ....

    asciidoctor("org.springframework.restdocs:spring-restdocs-asciidoctor")
}

val snippetsDir by extra { file("build/generated-snippets") }
tasks.test {
    useJUnitPlatform()
    outputs.dir(snippetsDir)

    mustRunAfter(tasks.flywayMigrate.get())
}

tasks.asciidoctor {
    dependsOn(tasks.test.get())
    sourceDir("src/main/docs")
    inputs.dir(snippetsDir)
    attributes["snippets"] = file(snippetsDir)
    attributes["docinfo1"] = ""
    attributes["environment-${project.properties["spring.profiles.active"]}"] = true
}
 

Со следующими ошибками, когда я меняю org.asciidoctor.convert на org.asciidoctor.jvm.convert :

 Expression 'asciidoctor' cannot be invoked as a function. The function 'invoke()' is not found
 

И:

 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public val TaskContainer.asciidoctor: TaskProvider<AsciidoctorTask> defined in org.gradle.kotlin.dsl
 

Пример, который я нашел в Интернете, выглядит так:

 configurations {
    asciidoctorExt
}

dependencies {
    asciidoctorExt 'org.springframework.restdocs:spring-restdocs-asciidoctor'
    // …
}

asciidoctor {
    configurations 'asciidoctorExt'
    // …
}
 

Может быть, кто-нибудь объяснит, что мне нужно изменить, чтобы я мог обновить свою версию asciidoctor.

Ответ №1:

Способ, которым я заставил это работать, таков:

 plugins {
    id("org.asciidoctor.jvm.convert") version "2.4.0"
}

val asciidoctorExt by configurations.creating

dependencies {
    asciidoctorExt("org.springframework.restdocs:spring-restdocs-asciidoctor:2.0.5.RELEASE")
    // ...
}

val snippetsDir by extra { file("${buildDir}/generated-snippets") }

val test = tasks.named<Test>("test") {
    outputs.dir(snippetsDir)
}

tasks.named<org.asciidoctor.gradle.jvm.AsciidoctorTask>("asciidoctor") {
    dependsOn(test)
    inputs.dir(snippetsDir)

    configurations("asciidoctorExt")

    setSourceDir("src/doc/asciidoc")
}