我有一个非常基本的多项目/多模块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
3条答案
按热度按时间wb1gzix01#
在我看来,你发现了文档的问题。
名为
buildSrc/src/main/groovy/myproject.java-conventions.gradle
的文件声明了所谓的预编译脚本插件。要做到这一点,你必须在buildSrc
项目中应用名为groovy-gradle-plugin
(用于Groovy插件)的插件:在此之后,它应该能够找到您的自定义
myproject.java-conventions
插件。如果是这样,您可以在Gradle issue tracker上创建一个问题,建议他们将上述代码片段添加到项目依赖关系文档中的示例中。sczxawaw2#
我和你一样的出发点,也遇到了同样的问题。虽然Bjorn的答案可能适用于Java,但对我来说,它并没有解决这个问题(对于Kotlin实现),因为它还需要在
repositories
块中包含gradlePluginPortal()
。因此,为了补充公认的答案,对我来说最有效的方法就是简单地为
application
类型运行./gradlew init
任务。另请参阅Building Java Applications with libraries Sample上的gradle文档。在这里,你应该总是得到一个运行的多项目,而不管实现语言如何。在我自己的Kotlin应用程序(使用groovy for gradle)中,它呈现了以下
buildSrc/build.gradle
:bnlyeluc3#
您可以转到设置--> Gardle并更改设置,如图所示,以允许您的项目使用IntelliJ IDEA构建,运行甚至测试。screen-shot