我正在将buildSrc约定插件迁移到独立插件。创建Gradle项目对象的插件示例很多,但对于Settings和Gradle却缺乏。我想将我们在gradle.settings.kts文件中使用的仓库列表集中到一起,因此我创建了一个Gradle Settings插件:RepositoriesPlugin。
它的实现方式与Project插件相同,但是,我不确定如何解释Gradle文档中的以下引用:“插件可以接收Settings类型的参数,这样插件就可以在设置脚本中应用”,该文档链接如下:Gradle 7.2 Doc 下面的示例显示了我如何在settings.gradle.kts文件中应用我的设置插件。按照文档,这是应用设置插件的方式吗?
我也包含了基本的设置插件代码。
我需要你的帮助来澄清我是否做得正确。我相信这篇文章会帮助那些偏离项目插件的其他人。
感谢您的时间和关注。
它的实现方式与Project插件相同,但是,我不确定如何解释Gradle文档中的以下引用:“插件可以接收Settings类型的参数,这样插件就可以在设置脚本中应用”,该文档链接如下:Gradle 7.2 Doc 下面的示例显示了我如何在settings.gradle.kts文件中应用我的设置插件。按照文档,这是应用设置插件的方式吗?
我也包含了基本的设置插件代码。
我需要你的帮助来澄清我是否做得正确。我相信这篇文章会帮助那些偏离项目插件的其他人。
感谢您的时间和关注。
// settings.gradle.kts
pluginManagement {
plugins {
id("com.abitofhelp.gradle.plugins.repositoriesplugin") version "1.0.0-1"
}
settings.extensions
getByType(RepositoriesPluginExtension::class).apply {
localRepoName = "local-repo"
localRepositoryPath = "../../local-repo"
}
// Set the plugin repositories for all projects.
//repositories {
// maven { name = "localRepo"; url = uri(file("./local-repo")) }
// gradlePluginPortal()
// mavenCentral()
//}
}
// repositoriesplugin.kt
open class RepositoriesPlugin: Plugin<Settings> {
override fun apply(settings: Settings) {
val extension: RepositoriesPluginExtension =
settings.extensions.create("repositoriesPlugin", RepositoriesPluginExtension::class.java)
val localRepositoryName = extension.localRepositoryName?.let { it }?: "../../localRepo"
val localRepositoryPath = extension.localRepositoryPath?.let { it }?: "../../local-repo"
settings.pluginManagement.repositories.apply {
// Set the PLUGIN REPOSITORIES for all subprojects.
maven { repository ->
repository.name = localRepositoryName
repository.url = URI.create(localRepositoryPath)
}
gradlePluginPortal()
mavenCentral()
}
settings.dependencyResolutionManagement.repositories.apply {
// Set the DEPENDENCY REPOSITORIES for all subprojects.
maven {
it.name = localRepositoryName
it.url = URI.create(localRepositoryPath)
}
mavenCentral()
gradlePluginPortal()
}
}
}
PluginAware
文档有帮助吗?我认为在任何settings.gradle.kts
中,您都可以使用apply { plugin("my.settings.plugin.id") }
激活插件。我认为这是因为虽然插件通常用于项目,但它们可以应用于任何对象。恰好项目具有plugins {}
块 - 但这是一种特殊情况。 - aSemy