在我的插件中,我正在使用com.intellij.psi.PsiMethod
和com.intellij.psi.PsiClass
。当我将我的AlternativeIdePath作为目标Pycharm并尝试使用我的插件时,上述两个类均出现NoClassDefFound
错误。我的问题分为两部分:
我应该使用python特定的psi类(PyFunction
/ PyClass
)还是基com.intellij.psi
类已经与pycharm兼容?
如果我确实需要包括其他psi模块/库,那么我的build.gradle文件会是什么样?
我在build.gradle中的intellij部分看起来像这样:
intellij {
version '182.4505.22'
alternativeIdePath "redacted\\Toolbox\\apps\\PyCharm-P\\ch-0\\182.4505.26"
}
我的项目sdk是JDK1.8,在我的模块依存关系中,我有Gradle: com.jetbrains:ideaIC:182.4505.22
,tools.jar
,pycharm.jar
和模块源。
答案 0 :(得分:0)
com.intellij.psi.PsiClass
和PsiMethod
不是“基本PSI类”,它们是Java PSI类,并且在不支持Java的产品中不可用。在PyCharm中,您需要使用PyFunction
/ PyClass
。
要构建同时支持IntelliJ和PyCharm的插件,您需要在build.gradle中添加Python插件作为插件的依赖项(它提供与PyCharm相同的API)。在plugin.xml中,您需要在com.intellij.modules.java
和com.intellij.modules.python
上使用可选的依赖项,以便仅将Java依赖的组件加载到Java IDE中,而将Python依赖的组件仅加载到PyCharm中
答案 1 :(得分:0)
除了 yole 的回答之外,还参考了 Intellij 的插件 sdk 文档: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html#exploring-module-and-plugin-apis
重要部分:
关于模块和插件依赖的说明:
(1) 此表并非详尽无遗; JetBrains 的基于 IntelliJ 平台的 IDE 中目前提供了其他模块。要查看模块列表,请在编辑 plugin.xml 文件时调用元素内容的代码完成功能。
(2) Java 语言功能被提取为 IntelliJ 平台 2019.2 版本中的插件。这种重构将 Java 实现与平台的其他非语言部分分开。因此,根据目标 IntelliJ 平台的版本,plugin.xml 中对 Java 功能的依赖性的表达方式不同:
2019.2 及更高版本的语法: plugin.xml 允许替代添加 com.intellij.java
build.gradle 需要定义对 Java 插件的依赖 intellij { plugins = ['com.intellij.java'] }
2019.2 之前的版本所需的语法,在所有版本中都允许: plugin.xml 添加 com.intellij.modules.java