Доступ к свойствам задачи в градле Котлин

Я пытался понять, как использовать Kotlin в качестве языка сценариев для Gradle, и я столкнулся с проблемой, что мне нужно получить доступ к свойству classpath в функции startScripts, однако я не могу понять, как разрешить свойство.

Мое предположение состоит в том, что я не получаю тип, которого я ожидаю, и поэтому мне нужно отдать его этому типу (в моем случае это должен быть CreateStartScripts). Кто-нибудь теперь, как отнести задачу startScript к CreateStartScripts в методе лямбда?

Мой сценарий выглядит следующим образом:

import groovy.lang.GroovyObject import org.springframework.boot.gradle.plugin.* import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact buildscript { dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE") } } val artifactoryUrl by project val artifactoryRepo by project plugins { java application idea } apply<SpringBootPlugin>() application { mainClassName = "com.emstar.Application" } java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } distributions { getByName("main") { contents { into("/") } } } tasks { "distTar" { val artifacts = configurations.archives.artifacts val distTar = tasks.findByName("distTar") artifacts.remove(artifacts.find{ (it as ArchivePublishArtifact).archiveTask == distTar }) enabled = false } "distZip" { dependsOn(createLogDir) } "startScripts" { // is a type of CreateStartScripts // classpath += files("src/dist/conf") doLast { // val windowsScriptFile = project.file(getWindowsScript()) // val unixScriptFile = project.file(getUnixScript()) // windowsScriptFile.text = windowsScriptFile.text.replace("set CLASSPATH=%APP_HOME%\\lib", "set CLASSPATH=%APP_HOME%\\conf;%APP_HOME%\\lib") // unixScriptFile.text = unixScriptFile.text.replace("CLASSPATH=$APP_HOME/lib", "CLASSPATH=$APP_HOME/conf$:APP_HOME/lib") } } } dependencies { compile("org.springframework.boot:spring-boot-starter-web") { exclude("org.springframework.boot", "spring-boot-starter-logging") exclude("org.springframework.boot", "spring-boot-starter-tomcat") } compile("org.springframework.boot:spring-boot-starter-log4j2") compile("org.springframework.boot:spring-boot-starter-jetty") compile("org.springframework.boot:spring-boot-starter-jdbc") { exclude("org.springframework.boot", "spring-boot-starter-logging") exclude("org.springframework.boot", "spring-boot-starter-tomcat") } compile("org.springframework.boot:spring-boot-starter-security") { exclude("org.springframework.boot", "spring-boot-starter-logging") } compile("org.springframework.boot:spring-boot-starter-security") { exclude("org.springframework.boot", "spring-boot-starter-logging") } compile("org.springframework.ldap:spring-ldap-core") compile("org.springframework.security:spring-security-ldap") compile("com.google.guava:guava:22.0") compile("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.7") compile("com.fasterxml.jackson.core:jackson-databind:2.8.7") testCompile("junit:junit") testCompile("org.assertj:assertj-core") testCompile("org.mockito:mockito-core") testCompile("org.springframework.boot:spring-boot-starter-test") } 

Когда я изменяю startScripts на это:

 "startScripts" { it -> val concrete = it as CreateStartScripts concrete.classpath += files("src/dist/conf") } 

Произошла следующая ошибка:

 e: C:\source\service\build.gradle.kts:82:5: None of the following functions can be called with the arguments supplied: public final operator fun <U : Task!> String.invoke(type: KClass<???>): ??? defined in org.gradle.script.lang.kotlin.NamedDomainObjectContainerScope public final operator inline fun String.invoke(configuration: Task!.() -> Unit): Task! defined in org.gradle.script.lang.kotlin.NamedDomainObjectContainerScope e: C:\source\service\build.gradle.kts:84:9: Cannot infer a type for this parameter. Please specify it explicitly. FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'service'. > Could not open cache directory akz6f8omykk1xzv7r475p6wwq (C:\Users\matanaka\.gradle\caches\4.0\gradle-script-kotlin\akz6f8omykk1xzv7r475p6wwq). > Internal error: unable to compile script, see log for details * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

Кто-нибудь столкнулся с этой проблемой?

Я запускаю Gradle 4.0 с kotlin-dsl 0.9

заранее спасибо

РЕДАКТИРОВАТЬ

Я нашел решение, которое больше похоже на обходной путь для меня, поэтому, если у кого-то есть более эффективный способ написать его, это будет высоко оценено.

Решение, которое я нашел, – это поиск задачи по имени и ее использование.

 var startScripts = findByName("startScripts") as CreateStartScripts startScripts.apply { classpath += files("src/dist/conf") doLast { val windowsScriptFile = project.file(windowsScript) val unixScriptFile = project.file(unixScript) windowsScriptFile.writeText(windowsScriptFile.readText() .replace("set CLASSPATH=%APP_HOME%\\lib", "set CLASSPATH=%APP_HOME%\\conf;%APP_HOME%\\lib")) unixScriptFile.writeText(unixScriptFile.readText() .replace("CLASSPATH=\$APP_HOME/lib", "CLASSPATH=\$APP_HOME/conf:APP_HOME/lib")) } }