Я думаю, что у вас есть некоторая путаница относительно того, где и как хранятся данные, и в частности , когда доступно.
Я только что получил этот плагин и посмотрел на он: он предоставляет расширение проекта, которое вы конфигурируете, чтобы указать, почему свойство extras заполняется, и задачу: «generateGitProperties». Эта задача добавляется в качестве зависимости для задачи «классы», поэтому она уже запускается, когда вы переходите к «shadowJar»
. Проблема в том, что определение свойств git и заполнение дополнительных свойств происходит только тогда, когда эта задача выполнена , поэтому они недоступны, когда сборка настроена , поэтому для ленивых shenanigans GString требуется передать ленивое значение в конфигурацию shadowJar, которая будет только оценивать после выполнения shadowJar.
Вы можете получить дополнительные свойства, например:
tasks.register("example") {
dependsOn("generateGitProperties")
doFirst {
val gitProps: Map<String, String> by project.ext
for ((name, value) in gitProps) {
println("GIT: $name -> $value")
}
}
}
Это работает, потому что оно находится в блоке "doFirst", поэтому происходит во время выполнения задачи. , а не время конфигурации. По сути, вы могли бы подражать "ленивому GString" материалу. Примерно так:
withType<Jar>().configureEach {
val lazyCommitId = object {
override fun toString(): String {
val gitProps: Map<String, String> by project.ext
return gitProps["git.commit.id"] ?: ""
}
}
manifest {
attributes["Git-Commit-Id"] = lazyCommitId
}
}
Я сделал это только для «jar», но «shadowJar» в любом случае является лишь подтипом задачи Jar.