首页 > 解决方案 > 从自定义插件动态加载 Gradle 插件

问题描述

我正在开发一个 Gradle 插件(https://github.com/hkhc/jarbird),它根据不同的场景在代码中应用了一些其他插件。

我可以通过将插件组件作为implementation依赖项放在我的插件项目中来做到这一点。然后使用project.apply()带有插件 ID 或插件类对象的方法应用项目。

但是,这意味着当我不需要这些插件时,会不必要地下载插件组件。所以我正在寻找一种动态解析插件的方法。

我试图通过compileOnly在我的自定义插件的构建脚本中添加依赖项来做到这一点,并将其加载到project.apply()我的插件中。

val artifactoryConfiguration = project.buildscript.configurations.detachedConfiguration(
    DefaultExternalModuleDependency(
        "org.jfrog.buildinfo",
        "build-info-extractor-gradle",
        "4.23.4"
    )
)
artifactoryConfiguration.resolve()

当我故意弄错坐标时,我得到了ModuleVersionNotFoundException. 所以我确信决心确实发生了。但是,project.apply(ArtifactoryPlugin::class.java)在执行插件时仍然会导致 ClassNotFoundException。Gradle 似乎无法从随机分离的配置中加载插件。

我被困在这一点上,不知道如何让 Gradle 加载我在自定义插件中动态解析的插件。

我是否弄错了方向,或者我错过了使这种方法有效的东西?

标签: gradlegradle-plugin

解决方案


推荐阅读