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

wlwcrazw  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(145)

我已经按照这个文档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/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/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文件自动添加到子项目的类路径中。如前所述,如果从根目录启动build,则会成功运行,但从子项目运行时会失败。我需要显式地将插件jar添加到子项目的buildscript部分吗?如果是这样,那么由于jar最终位于buildSrc/build/libs/目录中,所以确切的语法是什么呢?有一次,我从prj1/settings.gradle文件中将它显式地包含在includeBuild('../buildSrc')中,但这产生了一条错误消息,说buildSrc是保留的,不能在includeBuild()中引用

goucqfw6

goucqfw61#

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

plugins {
    id 'myproject.java-convention'
}

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

amrnrhlw

amrnrhlw2#

在对项目进行了两三次检查之后,将其与@PrasadU建议的示例项目进行了比较,我仍然被难倒了,无法找出我做了什么不同。我最终解压缩了示例项目,然后添加了我的脚本插件和构建,这奏效了。
第一个月

相关问题