Gradle:无法在构建脚本的范围内获取插件类

标签 gradle groovy gradle-plugin

过去几天我一直在创建自己的 gradle 插件(部分是为了学习,部分是为了清理我放置的一些 gradle 构建脚本),但是我遇到了一个我无法弄清楚的问题修理。在我的插件 jar 中有一个名为 me.alxandr.gradle.bintray.maven.MavenPackage 的接口(interface),但是当我尝试导入它时,我收到一条错误消息,提示找不到它。这真的很奇怪,因为插件显然正在运行(我看到它的输出,并且它的任务正在注册)。

目前我已经做了一个黑客来解决这个问题,如下所示:

project.ext.MavenPackage = MavenPackage

这只是使MavenPackage构建脚本中的可用名称,它可以工作,但我失去了对它的任何编辑器支持,因为它完全是动态的。有什么方法可以(从我的插件)让构建脚本在应用时导入包?怎么样MavenPublication在范围内,我不需要导入它。如果没有,为什么我不能从我的插件包中导入类?

完整的源代码可在 https://github.com/Alxandr/gradle-utils 获得.你可以在这里看到一个尝试:https://github.com/Alxandr/gradle-utils/blob/master/gradle/publish.gradle#L1 .当前代码按原样工作(上面解释了 hack),但我只是在寻找更好的方法来做到这一点。

最佳答案

为了在 Gradle 脚本中使用插件中的类,您必须将插件 JAR 添加到 buildscript 类路径中。

以下是如何做到这一点:

buildscript {
    repositories { /* where to get your plugin jar from, e.g. mavenLocal() */ }
    dependencies {
        classpath 'some_group:me.alxandr.plugin:1.0.0'
    }
}
import me.alxandr.gradle.bintray.maven.MavenPackage

您可以在 Gradle 用户指南中找到有关 using external dependencies in your build script 的更多信息。

关于Gradle:无法在构建脚本的范围内获取插件类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40234091/

相关文章:

gradle - 带有 groovy 环境的 Flyway gradle 插件

java - 从 StreamingMarkupBuilder 内部调用方法

Groovy - 类中的 MissingPropertyException

Gradle:如何通过管道传输到 Exec 任务

kotlin - 如何使用 Kotlin DSL 将插件应用到自身?

maven - 从build.gradle到Maven pom.xml

java - 使用 gradle 与 spring mvc 进行 Bootstrap

java - Gradle bootrun 错误,进程命令以非零退出值 1 完成

java - 在 Netbeans 中重命名 Gradle 项目

android-studio - Android Studio 无法打开项目