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

qv7cva1a  于 7个月前  发布在  其他
关注(0)|答案(3)|浏览(87)

我有一个非常基本的多项目/多模块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')
}

但是,when I actually try this并从项目根运行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
wb1gzix0

wb1gzix01#

在我看来,你发现了文档的问题。
名为buildSrc/src/main/groovy/myproject.java-conventions.gradle的文件声明了所谓的预编译脚本插件。要做到这一点,你必须在buildSrc项目中应用名为groovy-gradle-plugin(用于Groovy插件)的插件:

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

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

sczxawaw

sczxawaw2#

我和你一样的出发点,也遇到了同样的问题。虽然Bjorn的答案可能适用于Java,但对我来说,它并没有解决这个问题(对于Kotlin实现),因为它还需要在repositories块中包含gradlePluginPortal()
因此,为了补充公认的答案,对我来说最有效的方法就是简单地为application类型运行./gradlew init任务。另请参阅Building Java Applications with libraries Sample上的gradle文档。在这里,你应该总是得到一个运行的多项目,而不管实现语言如何。
在我自己的Kotlin应用程序(使用groovy for 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'
}
bnlyeluc

bnlyeluc3#

您可以转到设置--> Gardle并更改设置,如图所示,以允许您的项目使用IntelliJ IDEA构建,运行甚至测试。screen-shot

相关问题