2 回答
TA贡献1806条经验 获得超5个赞
Gradle使用AST Transformations扩展了Groovy语法。您提到的任务定义语法只是Gradle应用的转换之一。您可以在此处找到该转换的实现。要回答您的特定问题:
在我所知的任何地方,Gradle所应用的单个转换都没有专门记录。但是,您可以在上面的链接的同一包中查看其他类。
Gradle脚本支持Groovy语法的超集。任何有效的Groovy在Gradle脚本中也有效,但是,Gradle脚本不一定(而且通常不是)有效的“默认” Groovy。
由于它是在内存中进行操作的实际抽象语法树,因此无法获得等效的Groovy代码的输出。
TA贡献1772条经验 获得超5个赞
如果您想了解更多有关它的信息,请在类的gradle源代码中检查transformVariableExpression函数。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));
}
其转换task args?, <identifier>, args?或task(args?, <identifier>, args?)给task(args?, '<identifier>', args?) 它发现在的build.gradle任务定义,并添加周围的标识符(任务名称)的报价,以便能常规编译它没有问题。
添加回答
举报