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



我有一个带有的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 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插件可以通过两种方式应用:使用推荐的插件DSL(使用plugins { ... }块(或传统的插件应用方式(使用buildscript { ...}apply plugin: "$pluginId"(

但是插件DSL在脚本插件中不可用(请参阅插件DSL限制(,因此您需要使用传统的插件应用程序语法。

因此,您只需要将丢失的buildscript块添加到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-第三方插件无法通过外部构建脚本的ID应用。。

一个变通方法是通过插件的实现类而不是ID来应用插件(请参阅此注释(,如下所示

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