Eric
02/21/2022, 7:03 PMVampire
02/21/2022, 11:02 PMVampire
02/21/2022, 11:03 PMEric
02/22/2022, 12:52 PMkotlin/com/example/gradle/myplugin.gradle.kts
Can I do something like this:
plugins {
id "com.example.myplugin" version "1.0.0-RC02"
}
myplugin {
someprop1 = 1
someprop2 = "foo"
}
Vampire
02/22/2022, 1:14 PMVampire
02/22/2022, 1:19 PMinterface MyExtension {
val someprop1: Property<Int>
val someprop2: Property<String>
}
val myExtension = extensions.create<MyExtension>("myPlugin")
Eric
02/22/2022, 1:19 PMapply
ThanksVampire
02/22/2022, 1:20 PMEric
02/22/2022, 3:15 PMinterface ScaffoldExtension {
@get:Input
val version: Property<String>
@get:Input
val javaVersion: Property<String>
@get:Input
val freeCompilerArgs: Property<Array<String>>
@get:Nested
val models: LibraryProperties
}
val extension = extensions.create<ScaffoldExtension>("scaffold")
with(extension) {
version.convention("1.0")
javaVersion.convention("1.8")
freeCompilerArgs.convention(arrayOf("-Xjsr305=strict"))
models.include.convention(true)
models.version.convention("2.350.0")
}
interface LibraryProperties {
@get:Input
val include: Property<Boolean>
@get:Input
val version: Property<String>
}
I can’t seem to specify models.version
in the build that’s using the plugin:
scaffold {
version = "1.1"
models {
version = "2.351.0"
}
}
Vampire
02/22/2022, 6:48 PMVampire
02/22/2022, 6:51 PMconvention
is what you want.
For setting the version, you thier need to use models.version = "2.351.0"
, or you need to provide the configuration helper yourself, those are not auto-generated.
fun models(block: Action<LibraryProperties>) {
block.execute(models)
}
Eric
02/22/2022, 6:52 PMEric
02/22/2022, 6:54 PMif (extension.gcpStorage.include.getOrElse(false)) {
implementation("com.google.cloud:google-cloud-storage:${extension.gcpStorage.version.getOrElse(Defaults.gcpStorageVersion)}")
}
I can set
scaffold {
gcpStorage.include = true
}
but the dependency does not get added. I think it is too late.Vampire
02/22/2022, 7:01 PMEric
02/22/2022, 8:00 PMjvm-default
compiler options to no avail.
If I make the extension an abstract class instead of an interface, then the consuming project can’t create an instance.
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.gradle.internal.instantiation.generator.DependencyInjectingInstantiator.addServicesToParameters(DependencyInjectingInstantiator.java:167)
Does the abstract extension need a ctor w/ a certain signature?Vampire
02/22/2022, 8:01 PMVampire
02/22/2022, 8:02 PMcreate
give as additional parameters what you need as constructor args or something like that iircEric
02/22/2022, 8:04 PMDependencyHandler
in to my function, seems to have done it. otherwise it was trying to access it outside some scopeEric
02/22/2022, 8:05 PMscaffold {
gcpStorage {
include = true
}
}.addDependencies(dependencies)
thanks so much for your helpVampire
02/22/2022, 8:06 PM