Gradle 7.2:如何应用自定义 Gradle SETTINGS 插件?

2024-01-03

我正在将 buildSrc 约定插件迁移到独立插件中。有很多为 Project 对象创建 Gradle 插件的示例,但真正缺乏 Settings 和 Gradle。我想集中我们在 gradle.settings.kts 文件中使用的存储库列表,因此我创建了一个 Gradle 设置插件:RepositoriesPlugin。

它在项目插件中以相同的方式实现,但是,我不确定如何解释 Gradle 文档中的以下引用:“插件可以改为接收 Settings 类型的参数,在这种情况下,插件可以是应用在设置脚本中。”,如此链接的文档中所述:Gradle 7.2 文档 https://docs.gradle.org/current/userguide/custom_plugins.html#:%7E:text=A%20plugin%20can%20instead%20receive%20a%20parameter%20of%20type%20Settings%2C%20in%20which%20case%20the%20plugin%20can%20be%20applied%20in%20a%20settings%20script

以下示例显示了我如何在 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()
        }
    }
}

我只需要自己解决这个问题。您与最初的尝试相去不远,但是plugins块实际上必须消失after the pluginManagement堵塞。我的工作实现的基本布局如下所示:

// settings.gradle.kts

rootProject.name = "myProject"

pluginManagement {
    repositories {
        maven {
            url = uri("/tmp/maven-local")
            gradlePluginPortal()
        }
    }
}

plugins {
    id("com.example.my-plugin") version "1.0-SNAPSHOT"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 7.2:如何应用自定义 Gradle SETTINGS 插件? 的相关文章

随机推荐