前言:目标是复制 maven 父 pom 功能,该功能将插件、存储库、配置等应用于不在同一存储库上的项目。
我有一个插件,它将其他插件应用于项目,并配置一些存储库,ala
class BarPlugin implements Plugin<Project> {
@Override
void apply(Project p) {
project.pluginManager.apply("java");
project.pluginManager.apply("jacoco");
project.allProjects {
configuration -> configuration.repositories { mavenCentral(); }
};
}
}
据我阅读的 api,我无法使用这样的构造来添加具有给定版本的插件,例如plugin id 'com.foo.bar' version '1'
,因为插件管理器和插件属性都没有方法来应用具有给定版本的插件,并且该插件必须已经存在于类路径上才能这样应用。
在阅读https://docs.gradle.org/8.11.1/userguide/sharing_build_logic_between_subprojects.html#sec:convention_plugins后,我开始考虑将插件转换为约定插件,但似乎指南仅涉及单存储库设置,其中所有模块都可以通过通用 settings.gradle 文件相互查看。这适用于多存储库设置吗?buildsrc
在这种情况下是否对目录进行评估?
不可以,在项目内的脚本中编写的插件,即所谓的“约定插件”,不容易在不同项目之间共享。
您的基于类的插件已经走在了正确的轨道上。
通过此类插件(顺便说一下,在约定插件中也是如此)包含其他插件的方式实际上是将它们添加到插件的类路径中,然后按名称或类应用它们。包含您添加到类路径中的已编译插件代码的依赖项的版本决定了插件的版本。
您可以将插件代码作为常规依赖项添加到类路径,就像在任何其他项目中一样。我们将在自己的 Gradle 项目中构建我们的插件,该项目将有一个
build.gradle
文件。在该文件中,我们指定了包含插件代码的工件的依赖项。(这不是块中使用的插件 IDplugins
,这是 Gradle 使用的一种不同的查找机制,会导致加载相同的工件。)如果您的插件在Gradle 插件门户上发布,那么该工件的坐标就是插件页面上显示的坐标,它会告诉您如何使用插件应用程序的“旧版”方法。以门户上发布的 Kotlin JVM 插件为例。我们可以将其作为依赖项添加到我们的插件项目中:
使用我们的插件代码,我们就可以应用它(我更喜欢使用类,因为它经过类型检查):