IntelliJ Idea:如何在开发的插件中公开类、接口、注解

IntelliJ Idea: how to expose classes, interfaces, annotations in developed plugins

我已经为 IntelliJ Idea 创建了一个插件。在插件中,我定义了一个我想在我的项目中使用的注释,但它似乎不可访问。 我应该如何在 plugin.xml 文件中指定我想要公开的包?

当您安装插件时,它会在某个地方 - 例如C:\Users\xxx\.IdeaIC14\config\plugins\...

现在您知道了您的 jar 文件在哪里,您可以将它作为依赖项添加到您的项目中。如果你使用 Maven,你可以在你的 pom 中添加这样的东西:

<dependency>
    <groupId>yourplugin</groupId>
    <artifactId>yourplugin</artifactId>
    <version>1</version>
    <systemPath>C:\Users\xxx\.IdeaIC14\config\plugins\yourplugin.jar</systemPath>
    <scope>system</scope>
</dependency>

或者您可以 install the jar into your local repository 然后将其用作普通的 Maven 依赖项。

如果没有,则直接在项目设置中添加依赖项,因为它是任何其他 jar。

plugin.xml 与这些无关,这都是关于 jars 和类路径的。您可以在插件中做一些用户友好的检查和操作,这将为您添加依赖项。

默认情况下,插件可以自动读取和访问 任何 安装在相同 IDE 上的其他插件的 public 成员(即您的插件可以读取public 变量,调用 public 函数——一切都在同一个类路径上)。如果您依赖另一个插件,您必须首先将其添加为 explicit dependency within the plugin configuration file,以便最终用户的 IDE 知道在缺少插件时下载并安装您的插件所需的插件依赖项。

在开发过程中,您现在应该使用 Gradle。在项目的 build.gradle(或 build.gradle.kts)文件中,intellij.plugins property of the gradle-intellij-plugin will let you specify the the id and version of the plugin dependency. The values for these attributes can be found on the Plugin Repository,请参见。 Plugin XML ID)。随后,gradle-intellij-plugin 会将所需的 IntelliJ 平台插件作为 外部库 添加到您的项目中,从而允许您完成代码、静态分析并测试您的插件及其依赖项在插件沙箱内(通过 ./gradlew runIde)。

出于稳定性原因,插件应避免使用其他插件的内部 类。如果您希望允许其他插件以编程方式使用您的插件(即假设您想要提供 API),那么 IntelliJ 平台具有所谓的 Extension Points 的概念。这些将允许您为其他插件定义一个具体的接口,或 contract 以访问您的插件的功能,而无需了解其源代码。使用扩展点具有将这些插件与任何内部插件重构解耦的额外好处。