一个快速的问题,从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
}
}
非常感谢, 香卡
答案 0 :(得分:0)
切换为使用AttributeError: 'dict' object has no attribute 'lname'
时使用doLast
:
<<
task CommonTask_doLast {
doLast commonThingToDo
}
已经是commonThingToDo
的正确参数,它被包裹在示例中的另一个Closure中。