Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gradle/groovy脚本中的逻辑_Gradle_Groovy - Fatal编程技术网

gradle/groovy脚本中的逻辑

gradle/groovy脚本中的逻辑,gradle,groovy,Gradle,Groovy,我是groovy gradle领域的新手,现在我正在学习多个在线课程,但我在这里遗漏了一些东西 我给你举个例子。这将创建一个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

我是groovy gradle领域的新手,现在我正在学习多个在线课程,但我在这里遗漏了一些东西

我给你举个例子。这将创建一个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)
我假设插件是对象实例,apply是它的方法,T是一个参数。 那么什么是
应用插件“java”

还有一种东西叫做源集。它可能是采用闭包参数的方法,也可能是采用闭包作为参数的属性,因为groovy生成了默认getter。 我说不出来,因为在groovy中,等号是可选的,括号是可选的。----非常创新

最后还有一个叫做main的东西。我找不到它是什么,我一直在到处寻找,甚至在这里:

这个“main”包含名为java的东西(看起来像SourceDirectorySet的实例),它包含方法srcDir,该方法将字符串作为变量

这对你有意义吗?。 如何从此处提取信息: ,并在构建中使用它


我在这里错过了什么?

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

作用域中有一个隐式实例,您在gradle脚本中看到的大部分内容都将委托给它

乙二醇

相当于

getProject().apply([plugin: 'java'])
您可以在中阅读更多内容,但有一个属性文件将“java”映射到

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

Groovy的一个特性在Gradle的DSL中得到了广泛的应用。所以

实际上将动态地委托给

sourceSets.getByName('main').configure { ... } 
另一个“魔力”来源的特性是,在groovy中,您可以编写

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

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


请看

我是一个讨厌他所谓的魔法的人,因为它迫使我记住大量我必须考虑的伎俩,并通过谷歌搜索来解释。我无法找到:sourceset.main{…}与:sourceset.getByName('main')相同。请在合理的时间内配置{…}。那么,你认为Kotlin/Gradle对我来说会更好吗?这是一种折衷,我也是一个讨厌魔法的人,但是对于Gradle,为了可读性,我认为这是值得的。通常,您阅读gradle脚本的频率远远高于编写脚本的频率。当你提到憎恨魔法时,我已经准备好推荐Kotlin,因为魔法是可追踪的,并且在intellij中输入代码完成。我自己还没有试过Kotlin dsl,因为我觉得它有点笨重,也没有groovy的同类产品好看。Kotlin脚本看起来更像是代码,而不是groovy等效代码。你愿意用可读性来换取类型安全吗?我认为与Maven相比是值得的,Maven是xml的,而且非常神奇。如果在堆栈溢出上找不到maven示例,您通常会被卡住。有了gradle,我可以使用javadocs做几乎任何事情(假设你知道“神奇”的部分),而不需要从堆栈溢出复制/粘贴(假设有人之前也有同样的问题)
sourceSets.getByName('main').configure { ... } 
def a = new A()
a.foo = 'bar'
a.baz('x')
def a = new A()
a.with {
    foo = 'bar'
    baz('x')
}