android - Gradle:无法解析从非 build.gradle 文件导入的任务

标签 android gradle gradle-plugin

我有一个 docs.gradle 文件,其中

apply plugin: "org.jetbrains.dokka"

import org.jetbrains.dokka.gradle.DokkaTask
....

我从模块级 build.gradle 文件应用它

apply from: '../gradle/docs.gradle'

但我明白了

Could not compile script ...
script <path to docs.gradle> : 3: unable to resolve class org.jetbrains.dokka.gradle.DokkaTask

如果将导入行放置在任何 build.gradle 文件(根或模块级别)中,则接受导入行 异常(exception):

* Exception is:
org.gradle.groovy.scripts.ScriptCompilationException: Could not compile script '..../gradle/docs.gradle'.
    at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.wrapCompilationFailure(DefaultScriptCompilationHandler.java:192)
    at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.compileScript(DefaultScriptCompilationHandler.java:141)
    at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.compileToDir(DefaultScriptCompilationHandler.java:95)
    at org.gradle.groovy.scripts.internal.BuildOperationBackedScriptCompilationHandler$2.run(BuildOperationBackedScriptCompilationHandler.java:54)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)

最佳答案

Gradle 插件可以通过两种方式应用:使用推荐的 plugins DSL (使用 plugins { ... } block )或 legacy plugins application方式(使用 buildscript { ...}apply plugin: "$pluginId")

但是插件 DSL 在脚本插件中不可用(请参阅 plugins dsl limitations ),因此您需要使用旧版插件应用程序语法。

因此,您只需将缺少的 buildscript block 添加到您的 docs.gradle 脚本中,即可为 Gradle 提供解决“org.jetbrains.dokka”问题的方法不是 Gradle 核心插件的插件:

docs.gradle

buildscript {
    repositories {
        gradlePluginPortal()
    }
    dependencies {
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.6.0"
    }
}

apply plugin: "org.jetbrains.dokka"
    
import org.jetbrains.dokka.gradle.DokkaTask

// ...

不幸的是,存在这个已知问题 #1262 - Third-party plugins cannot be applied by ID from external build scripts ..

解决方法是通过其实现类而不是其 ID 应用插件(请参阅 this comment ),如下所示

docs.gradle

    buildscript {
        repositories {
            gradlePluginPortal()
        }
        dependencies {
            classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.6.0"
        }
    }
    
    // apply plugin:  'org.jetbrains.dokka' <-- apply by ID not supported here.
    apply plugin : org.jetbrains.dokka.gradle.DokkaPlugin   // <-- this works fine
    
    import org.jetbrains.dokka.gradle.DokkaTask

关于android - Gradle:无法解析从非 build.gradle 文件导入的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74307975/

相关文章:

android - 如何使用字符串请求从 JSON 文件中检索数据

android,将 View 图像保存为png文件

Android Gradle 插件 : Create AAR with Jar Dependencies and Proguard

Android Gradle 插件 0.7.0 : "duplicate files during packaging of APK"

gradle - 任务输出缓存已启用,但未配置或启用任何构建缓存

javascript - 为什么Android上的javascript执行顺序不一致

android - 如何在 Android 上使用 CameraX 获取可用分辨率?

android - 如何创建一个android库并将其上传到github?

android - 在项目 'mockableAndroidJar' 中找不到名称为 ':app' 的任务

node.js - Gradle Moowork Node 插件