Skip to content

Instantly share code, notes, and snippets.

@vmj
Last active October 15, 2018 05:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vmj/cd35e27e0253dd24358ebac8df2deaaf to your computer and use it in GitHub Desktop.
Save vmj/cd35e27e0253dd24358ebac8df2deaaf to your computer and use it in GitHub Desktop.
Gradle property in a GString
class PingServer extends DefaultTask {
@Input
final Property<CharSequence> fqdm = project.objects.property(CharSequence)
@TaskAction
void ping() {
println "Pinging ${fqdm.get()}"
}
}
class Server implements Named {
final String name
final Property<CharSequence> hostName
Server(String name, Project p) {
this.name = name
hostName = p.objects.property(CharSequence)
}
void setHostName(CharSequence g) {
hostName.set(g)
}
}
class MyExt {
Property<CharSequence> domainName
private NamedDomainObjectContainer<Server> servers
MyExt(Project p) {
domainName = p.objects.property(CharSequence)
domainName.set('')
servers = p.container(Server) { final name -> new Server(name, p) }
servers.all { final server ->
server.hostName.set("${server.name}${-> domainName.get()}")
final createServer = p.tasks.create("ping${server.name.capitalize()}", PingServer)
createServer.fqdm.set(server.hostName)
}
}
void servers(Closure c) { servers.configure(c) }
}
project.extensions.create("myExt", MyExt, project)
myExt {
servers {
fe1 {}
be1 {
hostName = "backend1${-> domainName.get()}"
}
}
domainName = ".example.com"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment