我正在定義一個gradle任務「launchIPad2Simulator」,它在robovm gradle插件中對另一個已定義的任務「launchIPadSimulatorfrom」進行了子類化。目標是設置定義哪個模擬器將運行的項目屬性。在子類別gradle任務中設置項目屬性
// 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文件空的,但如果上述任務,然後運行,則錯誤:錯誤:(112,0)沒有這樣的屬性:顯示robovm.device.name的類: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'
}
謝謝。有了這個語法,我可以動態地添加項目屬性。但是現在我在定義多任務時遇到了問題。假設我有launchIPad2Simulator,然後我定義了另一個launchIPadAirSimulator。在最後一個設置的屬性也會覆蓋運行iPad2模擬器的屬性。這可能是因爲它們被定義爲項目屬性。 – RenatoIvancic
如果IPadSimulatorTask允許直接在任務上設置屬性,而不是在此處使用「項目屬性」,則使用起來會更容易。一種解決方法可能是將項目屬性設置放在doFirst塊中。這樣,屬性就在使用任務之前設置。這應該允許您運行org.robovm.gradle.tasks.IPadSimulatorTask的多個實例。我建議你在robovm傢伙提出這個問題。 –
正如你所回答的那樣,IPadSimulatorTask應該允許設置任務屬性。我做了一個robovm gradle項目的分支並試用了它,它按預期工作。 – RenatoIvancic