【问题标题】:IntelliJ Idea: how to expose classes, interfaces, annotations in developed pluginsIntelliJ Idea:如何在开发的插件中暴露类、接口、注解
【发布时间】:2015-05-04 08:15:07
【问题描述】:

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

【问题讨论】:

  • 也许你应该用这些类、接口和注解创建一个项目,你的主项目将依赖它?
  • 这些注释由插件使用,因此我希望它们成为插件的一部分。我不希望用户重新定义它们。我会卢克从插件中导入它们,我想这是可能的
  • 不同意票数接近。问题非常清楚 - 请保持开放状态。
  • 您是否可以让其他不是您创建的类似插件以这种方式工作?
  • 你为什么要这样做,而不是把你的课程放在一个可以作为 maven <dependency> 轻松接收的罐子里?

标签: java intellij-idea intellij-plugin


【解决方案1】:

当你安装一个插件时,它会在一个特定的地方——例如。 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 和类路径的。您可以在插件中做一些用户友好的检查和操作,这将为您添加依赖项。

【讨论】:

    【解决方案2】:

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

    在开发过程中,您现在应该使用 Gradle。在您项目的build.gradle(或build.gradle.kts)文件中,gradle-intellij-pluginintellij.plugins 属性将允许您指定插件依赖项的idversion。这些属性的值可以在Plugin Repository 上找到,参见。 Plugin XML ID)。随后,gradle-intellij-plugin 会将所需的 IntelliJ 平台插件作为 外部库 添加到您的项目中,从而使您可以在插件沙箱中获得代码完成、静态分析和测试插件及其依赖项(通过./gradlew runIde)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多