如何将 Gradle 子项目配置为使用 ../buildSrc 中的约定插件?

问题描述 投票:0回答:1

我按照此文档https://docs.gradle.org/current/userguide/custom_plugins.html#sec:precompiled_plugins创建了一个基于预编译脚本类型插件的约定插件。当我从项目的根目录运行

./gradlew clean build
时,一切正常,但如果我进入使用约定插件的
prj1
子项目,则构建失败并显示以下消息:

Plugin [id: 'java-convention'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (plugin dependency must include a version number for this source)

项目布局:

buildSrc/
  build.gradle
  src/main/groovy/com/example/java-convention.gradle
prj1/
  build.gradle
build.gradle
settings.gradle

根级别

build.gradle
:

plugins {
    id 'java-convention'
}

根级

settings.gradle

include('prj1')

buildSrc/build.gradle

plugins {
    id 'groovy-gradle-plugin'
}

buildSrc/src/main/groovy/com/example/java-convention.gradle

plugins {
    id 'java'
}

java {
    sourceCompatibility = JavaVersion.VERSION_21
}

prj1/build.gradle

plugins {
    id 'java-convention'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

我认为根级别存在

buildSrc
目录会导致构建的插件 jar 文件自动添加到子项目的类路径中。如前所述,如果我从根启动构建,则构建会成功运行,但从子项目运行时会失败。我是否需要将插件 jar 显式添加到子项目的 buildscript 部分?如果是这样,由于 jar 最终位于
buildSrc/build/libs/
目录中,确切的语法是什么?有一次,我将其明确包含在
includeBuild('../buildSrc')
文件中的
prj1/settings.gradle
中,但这会产生一条错误消息,指出
buildSrc
已被保留,无法在
includeBuild()

中引用
gradle gradle-plugin
1个回答
0
投票

对于子项目 - 插件应使用前缀

plugins {
    id 'myproject.java-convention'
}

查看完整示例 - https://docs.gradle.org/current/samples/sample_convention_plugins.html

© www.soinside.com 2019 - 2024. All rights reserved.