【问题标题】:What does the asterisk '*' in a build.gradle configuration mean?build.gradle 配置中的星号“*”是什么意思?
【发布时间】:2021-08-10 13:10:44
【问题描述】:

这个 gradle 配置中的星号是什么意思? (来自https://github.com/envoyproxy/protoc-gen-validate

generateProtoTasks {
        all()*.plugins {
            javapgv {
                option "lang=java"
            }
        }
    }

这是此块的另一种用法,但没有星号(来自https://github.com/google/protobuf-gradle-plugin

generateProtoTasks {
    all().each { task ->
      task.builtins {
        java {
          option "lite"
        }
      }
    }
  }

【问题讨论】:

    标签: gradle groovy configuration proto


    【解决方案1】:

    *. 是 Groovy 的 spread-dot operator。来自文档:

    Spread-dot Operator (*.),通常缩写为 Spread Operator,用于对聚合对象的所有项目调用操作。相当于对每个item调用action,将结果收集到一个list中:

    class Car {
        String make
        String model
    }
    def cars = [
           new Car(make: 'Peugeot', model: '508'),
           new Car(make: 'Renault', model: 'Clio')]       (1)
    def makes = cars*.make                                (2)
    assert makes == ['Peugeot', 'Renault']                (3)
    

    1建立Car 项目的列表。列表是对象的集合。2调用列表上的展开运算符,访问每个项目的make 属性3返回与集合对应的字符串列表make 个项目

    表达式cars*.make 等价于cars.collect{ it.make }。当引用的属性不是包含列表的属性时,Groovy 的 GPath 表示法允许使用快捷方式,在这种情况下,它会自动扩展。在前面提到的情况下,可以使用表达式cars.make,但通常建议保留显式扩展点运算符。

    -- https://groovy-lang.org/operators.html#_spread_operator

    【讨论】:

    • 这正是我想要的,谢谢!!
    • @AdiS 如果此答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。请不要这样做。
    猜你喜欢
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多