我试图理解Gradle所谓的“依赖项”的基本思想。具体来说,我被Gradle用户指南的任务依赖项部分中给出的示例代码所迷惑。到目前为止,我的理解是,“依赖项”是以某种方式导入到给定项目中的东西(一般意义上的project,而不是gradle类型),并且可以被你的项目内的某些东西使用,但不一定完全使用或评估,在他们给予的例子中看起来还评估了从属任务'hello'
。
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
tasks.register('intro') {
dependsOn tasks.hello
doLast {
println "I'm Gradle"
}
}
gradle的输出-q介绍
> gradle -q intro
Hello world!
I'm Gradle
gradle中的“依赖”的概念是否完全不同,只是一种指定操作顺序的方式,而不是从其他包中导入某些功能?是否有任何方法可以只使用/评估某些其他任务的一部分,而不是整个任务(使其更类似于我对依赖的先入为主的想法)。
更让我困惑的是在用户指南的Core Dependency Management一节中讨论的依赖关系的概念。这似乎更符合我对依赖关系是什么的先入为主的想法。
除非我完全误解了这一切,否则在同一个用户指南中,我们似乎必须将“依赖项”的概念分开:
1.必须在当前任务之前运行的某些任务。
1.一个外部包,其中包含您要导入以供自己使用的功能。
当使用“依赖性”一词时,如何知道用户指南指的是哪一个?
我发现了一个相关的帖子here,但这只是提到这个想法作为一个“小抱怨”,但没有直接解决的答案。
2条答案
按热度按时间qqrboqgw1#
您在任何构建系统(不只是Gradle)中对“dependency”一词的两种用法感到困惑:
1.您在开篇引用的依赖关系是构建目标之间的依赖关系(在Gradle中称为'tasks')。这定义了任务执行的顺序。因此,如果您执行'intro'任务(通过运行'gradle intro'),dependsOn定义说'intro'依赖于'hello',因此必须首先执行'hello',然后是'intro'。执行发生是因为您运行了一个目标为'intro'的构建
1.第二种依赖关系是您所期望的依赖关系,即构建对外部库的依赖关系,需要导入这些库才能使构建工作。这些依赖关系在Gradle构建脚本的'dependencies'闭包中定义。
lrpiutwd2#
你对“依赖”这个词的含义感到困惑。
依赖关系只意味着一个东西需要(依赖于)另一个东西。它与导入包无关。如果你的代码依赖于其他代码,那么为了能够编译它,它需要被导入。所以因为它是一个依赖关系,gradle会下载jar并将它们放在classpath上。
任务依赖关系也是类似的,你只是说,要运行这个任务,那个任务需要先运行(或者是最新的)。