如果插件公开了自己的 API 供其他插件使用,则值得考虑将插件的 API 源捆绑在 ZIP 分发中。
如果第三方插件使用Gradle IntelliJ 插件并向插件添加了一个依赖项,该插件捆绑了 ZIP 分发中的源代码,则当开发人员导航到 API 类时,源代码将自动附加到插件库并在 IDE 中可见。能够看到 API 源极大地改善了开发体验,强烈建议捆绑它们。
从 Gradle IntelliJ 插件 1.7.0 开始,可以在 IDE 中附加捆绑的插件源。
API 源位置
API 源 JAR 必须位于example-plugin.zip 中!插件 ZIP 分发中的/plugin /lib /src目录,例如:
example-plugin.zip
└── example-plugin
└── lib
├── example-plugin.jar
└── src
└── example-plugin-api-src.jar
插件 ZIP 可以包含多个源 JAR,并且源 JAR 名称没有严格的规则。
定义插件 API
通常,以下类被视为插件 API:
扩展点及相关类
监听器和相关类
提供对插件数据/行为的访问的服务和实用程序
请记住,API 应该是稳定的并且很少更改,因为每个不兼容的更改都会破坏客户端插件。还建议将插件代码组织在多个职责明确的模块中,例如:
example-plugin-api- 包含 API 的模块
example-plugin-impl- 一个包含插件功能代码的模块,这些代码不打算被客户端插件扩展或使用
定义 API 的一般规则是包含可能被客户端插件代码使用的类。
当然,更复杂的插件可能需要更细粒度的结构。请参阅Gradle IntelliJ 插件 - 使用示例。
在 Gradle 构建脚本中捆绑 API 源
在最简单的情况下,如果一个项目由单个模块组成,并且插件 API 明确隔离在一个包中,例如com.example.plugin.openapi,可以通过tasks在 Gradle 构建脚本部分添加以下代码段来实现包含源 JAR:
科特林
时髦的
tasks {
val createOpenApiSourceJar by registering(Jar::class) {
// Java sources
from(sourceSets.main.get().java) {
include(“/com/example/plugin/openapi//.java")
}
// Kotlin sources
from(kotlin.sourceSets.main.get().kotlin) {
include("/com/example/plugin/openapi//.kt”)
}
destinationDirectory.set(layout.buildDirectory.dir(“libs”))
archiveClassifier.set(“src”)
}
buildPlugin {
dependsOn(createOpenApiSourceJar)
from(createOpenApiSourceJar) { into(“lib/src”) }
}
}
上述配置将从com.example.plugin.openapi包中创建一个包含 Java 和 Kotlin 源文件的源 JAR,并将其添加到所需的example-plugin.zip 中的最终插件 ZIP 分发中!/example-plugin /lib /src目录。
如果你的插件是 Gradle 项目,并且没有明确的开放 API 包分离,建议将插件项目重组为 Gradle 多项目变体,并创建一个专用的开放 API 子项目,其中包含要包含在最终的所有 API 源由主插件 Gradle 项目创建的发行版。