首页 > 解决方案 > buildSrc 文件夹中的 .gradle 文件是项目的插件吗?

问题描述

我在gradle官网学习gradle:

https://docs.gradle.org/current/userguide/declaring_dependencies_between_subprojects.html

在这里,在一个示例中,它在 buildSrc 文件夹中有一个文件-

buildSrc/src/main/kotlin/myproject.java-conventions.gradle.kts

plugins {
    id("java")
}

group = "com.example"
version = "1.0"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation("junit:junit:4.13")
}

项目结构如下:

.
├── buildSrc
│   ...
├── api
│   ├── src
│   │   └──...
│   └── build.gradle.kts
├── services
│   └── person-service
│       ├── src
│       │   └──...
│       └── build.gradle.kts
├── shared
│   ├── src
│   │   └──...
│   └── build.gradle.kts
└── settings.gradle.kts

模块构建脚本api/build.gradle.ktsshared/build.gradle.kts使用插件“myproject.java-conventions”作为:

plugins {
    id("myproject.java-conventions")
}

我在下面提到了如何创建自定义插件。

https://www.tutorialspoint.com/gradle/gradle_plugins.htm#:~:text=Plugin%20is%20nothing%20but%20set,are%20handled%20by%20plugins.&text=Extend%20the%20basic%20Gradle%20model ,elements%20that%20can%20be%20configured )。

我很困惑在 buildSrc 中只有一个 .gradle 或 .gradle.kts 文件是一个项目能够使用的插件。而且,如果是这样,他们为什么不将其用作:

应用插件:myproject.java-conventions

apply plugin: myproject.java-conventions应用插件和应用插件有什么区别

plugins {
    id("myproject.java-conventions")
}

标签: javagradlebuild.gradlegradle-plugin

解决方案


是的,该myproject.java-conventions.gradle.kts文件是一个 gradle 插件。具体来说,它是一个预编译脚本插件。所有子模块都可以使用这个插件,因为通过在项目中打包一个插件,buildSrc

Gradle 将负责...使其在构建脚本的类路径中可用。该插件对构建使用的每个构建脚本都是可见的。

plugins块只是一种应用插件的新方法。请参阅:应用 gradle 插件有什么区别?


推荐阅读