我正在实施LibGDX's TexturePacker with gradle中提供的texturePacker
任务。
project.ext {
// ...
texturePacker = ["assets", "../android/assets", "texture"]
}
import com.badlogic.gdx.tools.texturepacker.TexturePacker
task texturePacker << {
if (project.ext.has('texturePacker')) {
logger.info "Calling TexturePacker: "+ texturePacker
TexturePacker.process(texturePacker[0], texturePacker[1], texturePacker[2])
}
}
我使用了对类路径的建议修改并添加了扩展变量。现在我想将textPacker
扩展变量修改为闭包(这是正确的术语吗?),使用描述性成员名称而不是数组。我试过这样做:
project.ext {
// ...
texturePacker {
inputDir = "assets"
outputDir = "../android/assets"
packFileName = "texture"
}
}
这会出现以下错误:
错误:无法在项目&#39;:desktop&#39;上找到参数[build_4dusyb6n0t7j9dfuws8cc2jlu $ _run_closure1 $ _closure7 @ 6305684e]的方法texturePacker()类型为org.gradle.api.Project。
我对gradle和groovy很新,所以我不知道这个错误意味着什么。更重要的是,做我想做的事的正确方法是什么?
答案 0 :(得分:2)
我想,闭包不是你需要的东西,因为它不是用来存储变量,而是用来存储一些可执行的代码。顺便说一句,如果需要存储它,您必须添加=
,如下所示:
project.ext {
texturePacker = {
inputDir = "assets"
outputDir = "../android/assets"
packFileName = "texture"
}
}
无论如何,如果需要在texturePacker
变量中存储变量,则必须使用Map类型,然后使用Closure。这可以这样做:
project.ext {
texturePacker = [
inputDir : "assets",
outputDir : "../android/assets",
packFileName : "texture"
]
}
然后您只能通过名称访问此变量,如:
println texturePacker.inputDir
答案 1 :(得分:1)
或者,我认为您也可以使用这些属性来实现自己的任务。您可以使用DefaultTask,它是常规任务的标准实现(我相信对您来说已经足够了);
class TexturePacker extends DefaultTask {
String inputDir; // a property - not a field!
String outputDir; // a property - not a field!
...
@TaskAction
void doSth(){
// do sth with properties above - that will be called automatically by gradle as a task-execution
}
}
task packer (type:TexturePacker) {
inputDir '<your-input-dir>'
outputDir '<your-output-dir>'
}
语法可能不是非常正确,但是我想您会明白的。