【问题标题】:Whats the meaning of "with" in gradlegradle中的“with”是什么意思
【发布时间】:2016-03-09 10:21:48
【问题描述】:

在答案https://stackoverflow.com/a/35879150 的最后一行有一个with:

task gen (type: Jar) {
    description "Generates JAR without version number."
    archiveName = filename + ".jar"
    manifest {attributes 'Main-Class': mainFile}
    with jar
}

确切的含义是什么,它记录在哪里?我在 gradle 文档中找不到它,而 groovy (http://groovy-lang.org/style-guide.html#_using_with_for_repeated_operations_on_the_same_bean) 中的 with 似乎有所不同。

【问题讨论】:

    标签: gradle groovy build.gradle


    【解决方案1】:

    在您的情况下,您正在调用 Jar 类的 with()-方法。 (见Jar DSL documentation 和Jar API documentation 的最底部)

    将给定的规范添加为该规范的子项。

    所以,它不是Groovy 的with()-方法。

    【讨论】:

      【解决方案2】:

      在这种情况下,使用with,您似乎调用了名为jar 的闭包:

      jar {
          baseName filename
          manifest {
              attributes 'Main-Class': mainFile
          }
      }
      
      task gen (type: Jar) {
          //....
          with jar
      }
      

      在运行时(调用构建器时),它将被转换为:

      task gen (type: Jar) {
          //....
      
        jar {
          baseName filename
          manifest {
              attributes 'Main-Class': mainFile
          }
        }
      }
      

      【讨论】:

      • 您知道with 的记录位置吗?我试图弄清楚如何学习 gradle,但是对于一些事情我找不到文档,...
      • with 也记录在您的链接中:groovy-lang.org/…。关键是,with 将闭包作为参数并运行它。这与您在 gradle 任务中看到的行为完全相同。你可以在那个闭包中做几乎所有事情
      • 但是jar 不是对Java 插件生成的Jar 类的实例的引用吗?那怎么可能是闭包呢?
      • 这里的jar是你上面定义的闭包的名字名称,与Jar类无关
      • 在stackoverflow.com/questions/35895201/is-gradles-jar-a-method 上我已经了解到,jar {} 不是 Gradle 中的函数调用,但有时是方法 getByName 的一个集合。那么您是说getByName 还向project 添加了一个名为jar 的属性? 还是是添加该属性的JavaPlugin? 你有吗?参考?文档中似乎有很多东西很难找到。我认为这对于理解 gradle 的工作原理至关重要 - 所以真的希望你有答案,...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2022-12-11
      相关资源
      最近更新 更多