Plugins 如何解决插件代码和IntelliJ SDK之间的类路径不兼容

Plugins 如何解决插件代码和IntelliJ SDK之间的类路径不兼容,plugins,intellij-idea,classloader,Plugins,Intellij Idea,Classloader,我目前正在尝试为IntelliJ开发一个插件,它将使用一个“核心”库。核心库已经有了自己的依赖项(JAR文件),并在其他非IntelliJ项目中使用。不幸的是,IntelliJ SDK的某些依赖项与插件核心的依赖项相同,但版本冲突。到目前为止,这是可以管理的,因为我们删除了SDK中的依赖项,而是提供了核心的依赖项,并通过IntelliJ运行插件以正常工作。然而,我真的希望能够为插件编写自动化的单元测试,这会导致问题 按照中的说明,我将第一个单元测试设置为扩展LightCodeInsightFix

我目前正在尝试为IntelliJ开发一个插件,它将使用一个“核心”库。核心库已经有了自己的依赖项(JAR文件),并在其他非IntelliJ项目中使用。不幸的是,IntelliJ SDK的某些依赖项与插件核心的依赖项相同,但版本冲突。到目前为止,这是可以管理的,因为我们删除了SDK中的依赖项,而是提供了核心的依赖项,并通过IntelliJ运行插件以正常工作。然而,我真的希望能够为插件编写自动化的单元测试,这会导致问题

按照中的说明,我将第一个单元测试设置为扩展
LightCodeInsightFixtureTestCase
。但是,这无法通过安装方法,引发NoClassDefFoundErrors。请参阅错误的要点(picocontainer是冲突的依赖项)

通过检查运行插件时加载的类,我可以看到来自冲突依赖项的同一类加载到两个不同的类加载器中,一个
URLClassLoader
用于
com.intellij
依赖项,一个
inclugassloader
用于插件依赖项。这解释了为什么插件可以成功执行,但测试失败

此处提供了一个以这种方式失败的项目的小型自包含示例:

我的问题是,解决这些冲突的建议方法是什么,允许使用IntelliJ测试装置进行单元测试



完整披露:我在IntelliJ插件开发论坛上发表了文章。

所以这很晚了,但遇到了相同的问题,我通过在项目结构/库下添加库,然后转到模块/依赖项,并将范围更改为提供的来修复它