gradle - gradle/groovy 脚本中的逻辑

标签 gradle groovy

我是 groovy-gradle 领域的新手,现在我正在学习多个在线类(class),但我在这里遗漏了一些东西。

我会给你和例子。这将创建一个 Jar 文件:

apply plugin: 'java' // 1. Apply the Java plugin to the project

sourceSets {
    main {
        java {
            srcDir 'java' // 3. Add 'java' directory as a source directory
        }
    }
}

jar {
    manifest {
        attributes 'Implementation-Version': '1.0' // 2. Add manifest attribute
    }
}

您可以在任何地方找到此解决方案,但没有明确的解释。

现在,可以通过以下方式申请插件:Plugin.apply(T)我假设 Plugin 是对象实例, apply 是它的方法, T 是一个参数。
那么什么是apply plugin "java" ?

还有一种叫做 sourceSets 的东西。它可能是采用闭包参数的方法,也可能是由于 groovy 生成的默认 getter 而采用闭包作为参数的属性。
我不知道,因为在 groovy 中等号是可选的,括号是可选的。--- 非常创新!!!!!!!!!

最后还有main这个东西。我找不到它是什么,我一直在到处寻找它,甚至在这里:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.SourceSet.html

而这个'main'-ting包含一个叫做java的东西(看起来像SourceDirectorySet的实例),它包含方法srcDir,它将一个字符串作为一个参数。

这对你有意义吗?
如何从这里提取信息:
https://docs.gradle.org/current/dsl/ ,并在构建中使用它?

我在这里想念什么?

最佳答案

我在我的手机上,所以很难解释所有 Gradle 的魔力,但这应该对你有所帮助。

有一个隐含的 Project范围内的实例以及您在 gradle 脚本中看到的大部分内容都将委托(delegate)给它。

例如

apply plugin: 'java' 

相当于
getProject().apply([plugin: 'java'])

您可以在 writing a custom plugin section 中阅读更多内容但是有一个属性文件将“java”映射到JavaPlugin

当您应用“java”插件时,这将“混合”JavaPluginConvention到项目中(因此您现在可以在 java 中调用 getSourceSets(),它可以在 groovy 中缩写为“sourceSets”)

在 Gradle 的 DSL 中得到大量使用的一个特性是 Groovy 的 methodMissing(...)。 .所以
sourceSets.main { ... } 

实际上会被动态委托(delegate)给
sourceSets.getByName('main').configure { ... } 

另一个“魔法”来源的特性是在 groovy 中你可以编写
def a = new A()
a.foo = 'bar'
a.baz('x')

作为
def a = new A()
a.with {
    foo = 'bar'
    baz('x')
} 

希望您可以看到闭包中的所有属性/方法引用都委托(delegate)给“a”实例。这种配置风格有助于 gradle 脚本保持简洁。

the with method

关于gradle - gradle/groovy 脚本中的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359992/

相关文章:

Android Studio - 如何压缩对齐 apk

android - 没有可用于离线模式的 androidx.databinding :databinding-compiler:3. 4.2 的缓存版本

java - 如何阻止 JsonBuilder 排列字段顺序

java - 如何在Gradle插件中编写Test for SourceSets block

groovy - 无法在 groovysh 中加载 oracle.jdbc.driver.OracleDriver?

android - 在库 list 中使用 ${applicationId}

java - 无法解析配置 ':compileClasspath' 的所有文件

exception - Groovy Gorm在save()上捕获util.JDBCExceptionReporter错误

gradle - 无法使用 Gradle 部署到 Bintray

java - 使用 Groovy 1.8、Hibernate JPA 注释构建失败