Gradle 多项目构建:未找到插件

Aus*_*own 8 java groovy gradle

对于多项目/多模块 Gradle 构建,我有一个非常基本的用例。我最终需要的结构并不比官方 Gradle 文档中提出的用于声明子项目之间的依赖关系更复杂。

在这里复制他们的文档,我们有这个项目结构:

.
??? buildSrc
?   ...
??? api
?   ??? src
?   ?   ???...
?   ??? build.gradle
??? services
?   ??? person-service
?       ??? src
?       ?   ???...
?       ??? build.gradle
??? shared
?   ??? src
?   ?   ???...
?   ??? build.gradle
??? settings.gradle
Run Code Online (Sandbox Code Playgroud)

这些构建文件:

// settings.gradle
rootProject.name = 'dependencies-java'
include 'api', 'shared', 'services:person-service'

// buildSrc/src/main/groovy/myproject.java-conventions.gradle
plugins {
    id 'java'
}

group = 'com.example'
version = '1.0'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation "junit:junit:4.13"
}

// api/build.gradle
plugins {
    id 'myproject.java-conventions'
}

dependencies {
    implementation project(':shared')
}
shared/build.gradle
plugins {
    id 'myproject.java-conventions'
}

// services/person-service/build.gradle
plugins {
    id 'myproject.java-conventions'
}

dependencies {
    implementation project(':shared')
    implementation project(':api')
}
Run Code Online (Sandbox Code Playgroud)

但是,当我实际尝试此操作gradle build从项目根目录运行时,出现以下错误:

Plugin [id: 'myproject.java-conventions'] 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)
Run Code Online (Sandbox Code Playgroud)

只是为了踢球,我尝试添加一个版本,但可以预见的是,Gradle 也同样脾气暴躁,并说它无法解决这个工件。我究竟做错了什么?

我的 Gradle 版本信息:

------------------------------------------------------------
Gradle 6.5.1
------------------------------------------------------------

Build time:   2020-06-30 06:32:47 UTC
Revision:     66bc713f7169626a7f0134bf452abde51550ea0a

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          11.0.8 (Oracle Corporation 11.0.8+10)
OS:           Windows 10 10.0 amd64
Run Code Online (Sandbox Code Playgroud)

Bjø*_*ter 9

在我看来,您发现文档有问题。

buildSrc/src/main/groovy/myproject.java-conventions.gradle被调用的文件声明了所谓的预编译脚本插件。为此,您必须在项目中应用名为groovy-gradle-plugin(对于 Groovy 插件)的插件buildSrc

# buildSrc/build.gradle
plugins {
    id 'groovy-gradle-plugin'
}
Run Code Online (Sandbox Code Playgroud)

在此之后,它应该能够找到您的自定义myproject.java-conventions插件。如果是这样,您可以在Gradle 问题跟踪器上创建一个问题,以建议他们将上述代码段添加到项目依赖项文档中的示例中。

  • 接得好!这是来自 Gradle 项目的更准确的示例:[在子项目之间共享构建逻辑示例](https://docs.gradle.org/current/samples/sample_convention_plugins.html) (2认同)
  • 对于 kotlin (build.gradle.kts):`plugins {\`kotlin-dsl\`}` (2认同)