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

2022-09-04 19:30:38

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

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

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

这些构建文件:

// 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')
}

但是,当我实际尝试此操作并从项目根目录运行时,我收到以下错误: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)

只是为了踢球,我尝试添加一个版本,但可以预见的是,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

答案 1

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

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

# buildSrc/build.gradle
plugins {
    id 'groovy-gradle-plugin'
}

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


答案 2

我和你一起开始的方式和你一样,遇到了同样的问题。虽然Bjorn的答案可能适用于Java,但对我来说,它并没有解决问题(对于kotlin实现),因为它还需要在一个块中。gradlePluginPortal()repositories

因此,为了添加到可接受的答案中,对我来说最有效的方法是简单地运行一种类型的任务 。另请参阅有关使用库构建 Java 应用程序示例的 gradle 文档。在这里,您应该始终获得一个正在运行的多项目,而不管实现语言如何。./gradlew initapplication

在我自己的 kotlin 应用程序中(使用时髦的 dsl 表示 gradle),这呈现了以下内容:buildSrc/build.gradle

/*
 * This file was generated by the Gradle 'init' task.
 */

plugins {
    // Support convention plugins written in Groovy. Convention plugins are build scripts in 'src/main' that automatically become available as plugins in the main build.
    id 'groovy-gradle-plugin'
}

repositories {
    // Use the plugin portal to apply community plugins in convention plugins.
    gradlePluginPortal()
}

dependencies {
    implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72'
}

推荐