Итак, я перевожу пример кода того, как создать толстую банку с Gradle, из GroovyDSL в KotlinDSL (я использую Gradle 5.3.1).Я получил код GroovyDSL здесь :
jar {
manifest {
attributes "Main-Class": "com.baeldung.fatjar.Application"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
Вот как далеко я продвинулся: ОБНОВЛЕНИЕ: (последняя версия с обратной связью от JB Nizet)
jar {
manifest {
attributes("Main-Class" to "io.ktor.server.netty.EngineMain")
}
val compileConfig: Configuration = configurations.compile.get()
from {
compileConfig.
}
}
Проблема в том, что в compileConfig нет метода сбора, который является Конфигурацией
Вызов «from» также является для меня загадкой.Я вполне уверен, что метод происходит из AbstractCopyTask .Существует три его версии: одна принимает Object ... sourcePaths, а две другие имеют два параметра Object sourcepath и Closure / Action, но версия Groovy вызывает его только с одним замыканием!Мое лучшее предположение состоит в том, что замыкание автоматически оценивается, и результат приводится в объект ... вызывая первую версию метода.
ОБНОВЛЕНИЕ: (последнийверсия с обратной связью от JB Nizet)
Если вы хотите проверить свои идеи о том, как решить эту проблему , здесь , вы можете найти эту конфигурацию jar-task наПроект HelloWorld-Ktor.
jar {
manifest {
attributes("Main-Class" to "io.ktor.server.netty.EngineMain")
}
from({
val compileConfig = configurations.compile.get()
logger.info("#files to iterate over: ${compileConfig.count()}")
compileConfig.map { file ->
if (file.isDirectory) file else zipTree(file)
}
})
}
Компилируется, но не создает толстую банку (через "чистую сборку").Если посмотреть на вывод с информацией (через gradle clean build -x test --info ), можно найти ответ: на самом деле файлы не обрабатываются!
> Task :jar
#files to iterate over: 0
#files to iterate over: 0
Task ':jar' is not up-to-date because:
Output property 'archiveFile' file /Users/SSchrod/progs/data-integration-salesforce-auto-cancellationkt/build/libs/data-integration-salesforce-auto-cancellation-0.1.51-SNAPSHOT.jar has been removed.
#files to iterate over: 0
:jar (Thread[Execution worker for ':',5,main]) completed. Took 0.068 secs.
:assemble (Thread[Execution worker for ':',5,main]) started.
С кодомказалось бы, правильно переведено на Kotlin, может быть, в остальной части моего build-скрипта проблема?Оригинальный учебник содержал вызов java-плагина в его build.gradle
apply plugin: 'java'
repositories {
mavenCentral()
}
, которого нет в моем build.gradle.kts
:
plugins {
id("org.jetbrains.kotlin.jvm") version "1.3.20"
id("pl.allegro.tech.build.axion-release") version "1.9.4"
id("com.palantir.docker") version "0.21.0"
id("com.github.johnrengelman.shadow") version "5.0.0"
}
repositories {
mavenCentral()
jcenter()
}
, но его добавление некажется, не имеет значения.