2 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
Gradle使用AST Transformations擴(kuò)展了Groovy語(yǔ)法。您提到的任務(wù)定義語(yǔ)法只是Gradle應(yīng)用的轉(zhuǎn)換之一。您可以在此處找到該轉(zhuǎn)換的實(shí)現(xiàn)。要回答您的特定問(wèn)題:
在我所知的任何地方,Gradle所應(yīng)用的單個(gè)轉(zhuǎn)換都沒(méi)有專門記錄。但是,您可以在上面的鏈接的同一包中查看其他類。
Gradle腳本支持Groovy語(yǔ)法的超集。任何有效的Groovy在Gradle腳本中也有效,但是,Gradle腳本不一定(而且通常不是)有效的“默認(rèn)” Groovy。
由于它是在內(nèi)存中進(jìn)行操作的實(shí)際抽象語(yǔ)法樹,因此無(wú)法獲得等效的Groovy代碼的輸出。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果您想了解更多有關(guān)它的信息,請(qǐng)?jiān)陬惖膅radle源代碼中檢查transformVariableExpression函數(shù)。TaskDefinitionScriptTransformer
private void transformVariableExpression(MethodCallExpression call, int index) {
ArgumentListExpression args = (ArgumentListExpression) call.getArguments();
VariableExpression arg = (VariableExpression) args.getExpression(index);
if (!isDynamicVar(arg)) {
return;
}
// Matches: task args?, <identifier>, args? or task(args?, <identifier>, args?)
// Map to: task(args?, '<identifier>', args?)
String taskName = arg.getText();
call.setMethod(new ConstantExpression("task"));
args.getExpressions().set(index, new ConstantExpression(taskName));
}
其轉(zhuǎn)換task args?, <identifier>, args?或task(args?, <identifier>, args?)給task(args?, '<identifier>', args?) 它發(fā)現(xiàn)在的build.gradle任務(wù)定義,并添加周圍的標(biāo)識(shí)符(任務(wù)名稱)的報(bào)價(jià),以便能常規(guī)編譯它沒(méi)有問(wèn)題。
添加回答
舉報(bào)