Dariusz Kuc
02/07/2020, 2:57 AM@Input
@Option(option = "outputFileName", description = "target file name")
val outputFileName: Property<String> = project.objects.property(String::class.java)
@Suppress("UnstableApiUsage")
@Internal
@OutputFile
val outputFile: RegularFileProperty = project.objects.fileProperty()
How do I properly initialize the outputFile
with the specified outputFileName
?octylFractal
02/07/2020, 2:59 AMinit {}
block + https://docs.gradle.org/current/javadoc/org/gradle/api/file/RegularFileProperty.html#convention-org.gradle.api.provider.Provider-?
a regular file can be constructed using https://docs.gradle.org/current/javadoc/org/gradle/api/file/ProjectLayout.htmlDariusz Kuc
02/07/2020, 3:02 AMinit {
outputFile = project.objects.fileProperty().fileValue(File(outputFileName.getOrElse("whatever")))
}
?octylFractal
02/07/2020, 3:02 AMconvention(Provider<RegularFile>)
outputFile.convention { project.layout.projectDirectory.file(outputFileName.getOrElse("whatever")) }
Dariusz Kuc
02/07/2020, 3:06 AMFile
but got RegularFile
octylFractal
02/07/2020, 3:06 AMRegularFile
Dariusz Kuc
02/07/2020, 3:07 AM@Internal
@OutputFile
val outputFile: RegularFileProperty = project.objects.fileProperty()
init {
outputFile.convention { project.layout.projectDirectory.file(outputFileName.getOrElse("whatever")) }
}
octylFractal
02/07/2020, 3:08 AMDariusz Kuc
02/07/2020, 3:08 AMoctylFractal
02/07/2020, 3:09 AMRegularFileProperty.convention
uses RegularFile
in 6.1.1Dariusz Kuc
02/07/2020, 3:09 AMoctylFractal
02/07/2020, 3:09 AMDariusz Kuc
02/07/2020, 3:10 AM{}
vs value set ()
octylFractal
02/07/2020, 3:46 AMDariusz Kuc
02/07/2020, 3:46 AMoctylFractal
02/07/2020, 3:47 AMproject.provider()
Dariusz Kuc
02/07/2020, 3:47 AMproject.provider { convention }
? didn't like itoctylFractal
02/07/2020, 3:50 AM{ ... }
wrapped in project.provider
, e.g. outputFile.convention(project.provider { ... })
Callable
via implicit Single-Abstract-Method (SAM) Conversion, then project.provider()
converts that to a Provider
, which outputFile.convention()
can then takeDariusz Kuc
02/07/2020, 3:56 AMoctylFractal
02/07/2020, 3:57 AMoutputFile.convetion(project.layout.projectDirectory.file(outputFileName))
Dariusz Kuc
02/07/2020, 3:58 AMoctylFractal
02/07/2020, 3:58 AMoutputFileName
to "whatever"getOrElse
Dariusz Kuc
02/07/2020, 3:58 AM@OutputFile
val outputFile: Provider<RegularFile> = outputFileName.map { name -> project.layout.projectDirectory.file(name) }