第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

了解Gradle任務(wù)定義中的常規(guī)語(yǔ)法

了解Gradle任務(wù)定義中的常規(guī)語(yǔ)法

我是Gradle和Groovy的新手,并試圖了解在定義gradle任務(wù)時(shí)在Groovy級(jí)別上正在發(fā)生的事情。task hello  {    println "configuring task hello"    doLast {     println "hello there"    }}通過(guò)閱讀“ Gradle In Action”這本書,我知道task hello {}確實(shí)是task()對(duì)Groovy Project接口方法的調(diào)用。在第77頁(yè)上,它顯示了Project接口上有4個(gè)稱為task的方法task(args: Map<String,?>, name:String)task(args: Map<String,?>, name:String, c:Closure)task(name: String)task(name: String, c:Closure)我了解{}就是封閉體。我不明白的是groovy如何根據(jù)https://stackoverflow.com/a/25592665/438319解釋hello,其中有一個(gè)groovy編譯器插件可以轉(zhuǎn)換為task hello { }task hello { }task('hello', { })我的問(wèn)題:在哪里可以找到有關(guān)進(jìn)行轉(zhuǎn)換的Gradle Groovy Compiler插件的信息?因?yàn)間radle以某種方式擴(kuò)展了Groovy編程語(yǔ)言,所以聲稱Gradle腳本是groovy程序在技術(shù)上是不正確的嗎?有沒(méi)有辦法讓gradle命令打印出編譯器插件運(yùn)行后生成的基本groovy代碼?
查看完整描述

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代碼的輸出。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
月關(guān)寶盒

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)題。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 2 回答
  • 0 關(guān)注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)