过去几天我一直在创建自己的 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/