Как получить доступ к версии проекта из выражений Gradle Kotlin DSL?

У меня есть сценарий сборки Gradle 5.3 с использованием Kotlin DSL, аналогичный этому:

plugins {
    `kotlin-dsl`
    `java-library`
}

group = "my.company"
version = "1.2.3"

Здесь version= преобразуется в org.gradle.api.Project.setVersion.

Теперь, ниже, я хотел бы сделать это (перенос из файла сборки Groovy DSL):

tasks.named<Jar>("jar") {
    manifest {
        attributes(
            "Product-Version" to version
        )
    }
}

Здесь version преобразуется в AbstractArchiveTask.getVersion - не то, что я хочу (и тоже устарело)!

Решив, что я могу использовать квалифицированный this Котлина, я попытался использовать

"${[email protected]}"

вместо этого (NB: дополнительный перенос строк избавляет от дополнительной ошибки типа), но теперь я получаю Unresolved reference: @Project.

Как мне получить доступ к версии проекта из выражения Kotlin DSL?


person Raphael    schedule 16.04.2019    source источник


Ответы (1)


Скрипт Gradle, похоже, не вложен в Project, но вместо этого делегирует методы доступа к своим соответствующим свойствам. Фактически, верхний уровень this относится к типу Build_gradle.

Когда эти методы доступа затенены, можно использовать переменную project; это,

project.version

решает проблему. Как альтернатива,

this@Build_gradle.version

также действительный, но менее читаемый.

person Raphael    schedule 16.04.2019