简体   繁体   中英

Set the project properties in subclassed gradle task

I am defining a gradle task "launchIPad2Simulator" that is subclassing another already defined task "launchIPadSimulatorfrom" in robovm gradle plugin. The goal is to set the project properties which are defining which simulator will run.

// Run the IPad2 simulator
task launchIPad2Simulator2(type: org.robovm.gradle.tasks.IPadSimulatorTask) {

  project.setProperty("robovm.device.name", "iPad-2")
  project.setProperty("robovm.arch", "x86")
} 

But the problem is, I must first define the properties in the gradle.properties file. They don't even need to have any value assigned. The whole content of the gradle.properties file:

robovm.device.name
robovm.arch

I would rather have gradle.properties file empty, but if the above task is then run, the error: Error:(112, 0) No such property: robovm.device.name for class: org.gradle.api.internal.project.DefaultProject_Decorated is shown.

Also if properties are only defined in task as following (gradle.properties is empty), they are ignored.

// Run the IPad2 simulator
task launchIPad2Simulator2(type: org.robovm.gradle.tasks.IPadSimulatorTask) {

  project.properties.put("robovm.device.name", "iPad-2")
  project.properties.put("robovm.arch", "x86")
}

So what is the correct way to dynamically set the project properties in subclassed task?

=== Edit ===

Ok now I see that setting the project properties is also not good, because in multiple tasks it gets overwritten. So maybe this shouldn't be project properties in first place.

The temp solution now is using command line invocation of tasks:

// simulator with properties launched from command line
task launchIPad2Simulator1(type: Exec) {
  commandLine 'gradle', '-Probovm.device.name=iPad-2', '-Probovm.arch=x86', 'launchIPadSimulator'
}

try

task launchIPad2Simulator2(type: org.robovm.gradle.tasks.IPadSimulatorTask) {
  project.ext."robovm.device.name" = "iPad-2"
  project.ext."robovm.arch" = "x86"
}

this is the gradle syntax to add dynamic properites to the project object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM