背景
簡要說明:
UAST – Unified Abstract Syntax Tree
UAST (Unified Abstract Syntax Tree) is an abstraction layer on the?PSI?of different programming languages targeting the JVM (Java Virtual Machine). It provides a unified API for working with common language elements like classes and method declarations, literal values, and control flow operators.
大意:
UAST(統一抽象語法樹)是針對JVM (Java虛擬機)的不同編程語言的PSI上的抽象層。它提供了一個統一的API,用于處理公共語言元素,如類和方法聲明、文字值和控制流操作符。
你如果用到了PSI與JAVA相關的東西,都可能出現我這個問題;當然類似其他PSI抽象也可以參考這個解決辦法。
在JetBrains-intellij-idea?插件開發時,編譯正常,運行不正常的奇怪問題;
插件開發依賴版本(申明了依賴JAVA):
intellij {version.set("2024.1.7")type.set("IC") // Target IDE Platform# 此處申明了需要依賴javaplugins.set(listOf("com.intellij.java"))
}
問題現象
編譯正常,運行到?PsiMethod部分報錯;
異常堆棧關鍵信息
#c.i.i.p.PluginManager - com/intellij/psi/PsiMethod
java.lang.NoClassDefFoundError: com/intellij/psi/PsiMethod......
Caused by: java.lang.ClassNotFoundException: com.intellij.psi.PsiMethod PluginClassLoader(plugin=PluginDescriptor
......
結論
插件依賴需要檢查三個步驟:JetBrains官方說明
-
確定 Plugin ID
-
檢查項目設置
-
在plugin.xml中定義;
如果編譯正常,運行出現 java.lang.NoClassDefFoundError一般而言是遺漏了第三個步驟。
解決辦法很簡單:在plugin.xml中添加如下內容:
<depends>com.intellij.java</depends>