【问题标题】:Configuring IntelliJ Platform plugin's workspace配置 IntelliJ 平台插件的工作区
【发布时间】:2017-10-26 13:52:24
【问题描述】:

我一直在为 IntelliJ 的插件开发设置工作区。有一个问题我无法解决。

我有两个插件:A 和 B。B 插件依赖于 A。A 插件作为可安装的 zip 包提供(我没有代码,我不想将其添加到我的项目)。

在手册中,我遇到了this page。我将 A 插件(从 zip 文件中提取)中的 jar 添加到运行 B 插件时使用的 SDK。不幸的是,当沙箱被引导时,我收到以下错误:

Problems found loading plugins:
Plugin "B" was not loaded: required plugin "A" not installed.

Disable B
Open plugin manager

这是否意味着 SDK 中的插件没有自动安装?

我尝试在沙盒中安装 A 插件,但随后出现强制转换异常 - 使用了两个不同的类加载器。

当然,我在 B.plugin.xml 文件中有相应的依赖配置:

<depends>A</depends>

我的问题是我应该如何提供 A 插件才能开发 B 插件?没有A的源码可以开发B插件吗?

在我添加到 SDK 的类路径的 jar 中,有一个包,其中包含 A 插件的 plugin.xml 文件。该插件也未列在插件列表中。

我确信这两个插件都配置正确,因为当我将它们安装在独立的 IntelliJ 实例中时没有问题。此外,我没有任何编译错误。

经过几个小时的调试。 A 插件被标记为未安装,因为在 PluginManagerCore:loadDescriptorsFromClassPath 方法中没有提供适当的 jar URL。 BootstrapClassLoaderUtil 似乎没有包含 SDK 中配置的所有条目。

我尝试设置 -Didea.additional.classpath 属性,但我再次遇到类转换异常。

【问题讨论】:

    标签: intellij-idea intellij-plugin


    【解决方案1】:

    终于找到了解决办法。

    B 插件由其他 B 子模块组成:

    • B.submodule-1
    • B.submodule-2
    • B.submodule-3

    其中一个子模块依赖于 A 的子模块。像这样的:

    B:
    | B.plugin-submodule
    | B.submodule-1
       | A.submodule1
       | A.submodule2
    | B.submodule-2
    | B.submodule-3
    

    基于 gradle 设置,IntelliJ 解析了所有子模块的所有依赖项。最初,我删除了 Gradle 依赖项并仅为插件子模块设置 JDK。其他人(submodule-1/2/3)需要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多