【问题标题】:Set the project properties in subclassed gradle task在子类 gradle 任务中设置项目属性
【发布时间】:2015-08-08 20:18:12
【问题描述】:

我正在定义一个 gradle 任务“launchIPad2Simulator”,它是 robovm gradle 插件中另一个已经定义的任务“launchIPadSimulatorfrom”的子类。目标是设置定义哪个模拟器将运行的项目属性。

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

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

但问题是,我必须先在 gradle.properties 文件中定义属性。他们甚至不需要分配任何值。 gradle.properties 文件的全部内容:

robovm.device.name
robovm.arch

我宁愿让 gradle.properties 文件为空,但是如果上面的任务然后运行,错误:Error:(112, 0) No such property: robovm.device.name for class: org.gradle .api.internal.project.DefaultProject_Decorated 已显示。

此外,如果属性仅在任务中定义如下(gradle.properties 为空),它们将被忽略。

// 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")
}

那么在子类任务中动态设置项目属性的正确方法是什么?

=== 编辑 ===

好的,现在我看到设置项目属性也不好,因为在多个任务中它会被覆盖。所以也许这首先不应该是项目属性。

现在的临时解决方案是使用命令行调用任务:

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

【问题讨论】:

    标签: groovy gradle robovm project-properties


    【解决方案1】:

    试试

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

    这是向项目对象添加动态属性的 gradle 语法。

    【讨论】:

    • 谢谢。使用这种语法,我可以动态添加项目属性。但是现在我在定义多个任务时遇到了问题。假设我有launchIPad2Simulator,然后我定义了另一个launchiPadAirSimulator。最后一个中设置的属性也覆盖了运行 iPad2 模拟器的属性。这可能是因为它们被定义为项目属性。
    • 如果 IPadSimulatorTask 允许直接在任务上设置属性而不是在此处使用项目属性,它会更容易使用。一种解决方法可能是将项目属性设置放在 doFirst{} 块中。这样,就在使用任务之前设置属性。这应该允许您运行 org.robovm.gradle.tasks.IPadSimulatorTask 的多个实例。我建议你向 robovm 的人提出这个问题。
    • 正如您所回答的,IPadSimulatorTask 应该允许设置任务属性。我做了一个 robovm gradle 项目的 fork 并尝试了它,它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多