วิธีเข้าถึงเวอร์ชันโปรเจ็กต์จากภายในนิพจน์ 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 ของ Kotlin ได้ ฉันพยายามใช้

"${[email protected]}"

แทน (หมายเหตุ: การตัดสตริงพิเศษจะกำจัดข้อผิดพลาดประเภทเพิ่มเติม) แต่ตอนนี้ฉันได้รับ 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