全局
我有一个库,在其他项目中被用作依赖项。每个项目都有一些与test suites
相关的公共配置,这些配置依赖于我的库。这就是为什么我创建了一个plugin
,它为我配置了这些配置,这样我就可以添加插件并完成它:
plugins {
id("org.my.gradle.plugin") version "internal"
}
项目结构
+ root
+ my-api/... (self-sustained; doesn't depend on anything, pretty much interfaces)
+ my-implementation/... (depends on my-api and `my-gradle-plugin` via `plugins { id("org.my.plugin") }`)
+ my-gradle-plugin/... (the plugin itself)
+ build.gradle.kts
plugins {
`java-gradle-plugin`
`maven-publish`
}
gradlePlugin {
plugins {
create("org.my.gradle.plugin") {
id = "org.my.gradle.plugin"
group = "org.my.gradle.plugin"
implementationClass = "org.my.gradle.plugin.MyGradlePlugin"
version = project.version
}
}
}
+ build.gradle.kts // a bunch of shared task configurations and some repository configuration (mavenLocal, maven(xyz), mavenCentral())
+ gradle.properties - contains only "version=0.0.3-SNAPSHOT"
+ settings.gradle.kts
pluginManagement {
repositories {
mavenLocal()
maven { url = uri("https://xyz") }
gradlePluginPortal()
mavenCentral()
}
resolutionStrategy {
val version: String by settings
eachPlugin {
if (requested.id.id == "org.my.gradle.plugin") {
useVersion(version)
}
}
}
}
问题
如果是一个独立的项目,这个插件可以很好的工作。不幸的是,这使我的工作流程变得复杂,所以我想我可以在同一个多模块项目中使用它。
不幸的是,我遇到了问题,因为gradle
似乎不知道它需要构建plugin
,以便在其中一个模块中构建use
,因此我得到:
* Where:
Build file '/workspace/my-implementation/build.gradle.kts' line: 3
* What went wrong:
Plugin [id: 'org.my.gradle.plugin', version: '0.0.3-SNAPSHOT'] was not found in any of the following sources:
- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'org.my.gradle.plugin:org.my.gradle.plugin.gradle.plugin:0.0.3-SNAPSHOT')
Searched in the following repositories:
MavenLocal(file:/home/jenkins/.m2/repository/)
maven(https://xyz)
Gradle Central Plugin Repository
MavenRepo
为什么会失败?
我知道spring-boot-gralde-plugin
是spring Boot 多模块gradle项目的一部分,并且在项目本身中使用。不幸的是,我还没能弄清楚什么是使它工作的“魔术”。
你知道我错过了什么吗
1条答案
按热度按时间wkyowqbh1#
我花了大半天的时间,但我终于弄明白了。
为了在同一个仓库中使用插件,你必须在你的
plugin
中放置一个settings.gradle.kts
文件。这将plugin
构建与你的其他模块分开。然后你可以在pluginManagement
中使用includeBuild()
来强制插件的构建先于其他一切:然后,您可以使用插件没有任何问题:
我正在使用gradle 7.5+,所以不确定这是否适用于旧版本。
这些文档还在此处提到:https://docs.gradle.org/7.6/userguide/composite_builds.html#included_plugin_builds