我觉得这个问题的答案很简单,但是我找不到。
我正在尝试用Kotlin创建一个Gradle扩展。我要做的第一个任务是有效地调用project.copy
任务,这样我就可以将源文件移动到构建目录并执行令牌替换(我知道,我还没有实现这一点)。
编译完成后,Gradle会识别该插件。(至少)有两个问题。编译器抱怨from
和into
或未使用。我的第一个提示是我做错了什么。第二个错误是,当我运行任务Gradle告诉我这个错误时:
* What went wrong:
Execution failed for task ':gsqlCopySources'.
> Cannot convert path to File. path='null'
代码:
import org.gradle.api.DefaultTask
import com.optum.giraffle.GsqlExtension
import org.gradle.api.tasks.*
import java.io.File
open class CopySources: DefaultTask() {
private val extension = project.extensions.run {
findByName("gsql") as GsqlExtension
}
@OutputDirectory
val outputDirectory: File = project.file("${project.buildDir}/${extension.scriptPath}")
@InputDirectory
val inputDirectory: File = project.file("${project.rootDir}/${extension.scriptPath}")
init {
group = "build"
description = "Copy gsql scripts to build directory performing token replacement"
}
@TaskAction
fun copyFiles() {
inputDirectory.apply {
parentFile.mkdirs()
}
project.copy{
val from = inputDirectory
val into = outputDirectory
}
}
}
发布于 2019-01-17 22:04:11
我想我已经找到解决方案了,看起来from
和into
都是函数。
@TaskAction
fun copyFiles() {
inputDirectory.apply {
parentFile.mkdirs()
}
project.copy{ copySpec ->
copySpec.from(inputDirectory)
copySpec.into(outputDirectory)
}
}
发布于 2019-01-17 16:32:28
您正在为from
和into
声明新值,而不是为现有值赋值。
你的代码应该是:
@TaskAction
fun copyFiles() {
inputDirectory.apply {
parentFile.mkdirs()
}
project.copy{
from(inputDirectory)
into(outputDirectory)
}
}
https://stackoverflow.com/questions/54229094
复制相似问题