Gradle左移运算符(<<)vs doLast行为差异

时间:2019-03-09 13:11:32

标签: gradle build.gradle

一个快速的问题,从Gradle的5个以上版本切换到doLast弃用了leftShift,我注意到代码现在与doLast一起工作的行为发生了变化。

在这里,我有一个非常简单的build.gradle,如下所示:

import csv
import io


def parse_to_csv_string(xml):
    print('parse_to_csv_string')
    csv = []
    parsed_data = serialize_xml(xml)
    rows = list(parsed_data[1][0])
    header = get_cells_text(rows[0])
    with io.StringIO() as f:
        writer = csv.DictWriter(f, fieldnames=header)
        for row in rows:
            row = get_cells_text(row)
            writer.writerow(row)
        f.seek(0)
        data = f.read()
    return data

def get_cells_text(row):
    row_dict = {}
    for cell in row:
        column_name = get_column_name(cell)  # <- can this be done?
        row_dict[column_name] = elm[0].text or ""
    return row_dict

从命令行运行gradle将产生以下结果。我的印象是,我们现在可以使用左移运算符(<<)作为doLast方法的同义词,但是即使构建成功,每种情况下的输出也似乎是不同的。

我有点困惑,如果有人能解释我在做什么错,我将不胜感激。

def commonThingToDo = { task ->
    println "Running ${task.name}"
}

task CommonTask << commonThingToDo

task CommonTask_doLast {
    doLast {
            commonThingToDo
    }
}

非常感谢, 香卡

1 个答案:

答案 0 :(得分:0)

切换为使用AttributeError: 'dict' object has no attribute 'lname' 时使用doLast

<<

task CommonTask_doLast { doLast commonThingToDo } 已经是commonThingToDo的正确参数,它被包裹在示例中的另一个Closure中。