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

时间:2014-08-17 17:50:01

标签: plugins intellij-idea classloader

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

按照here的说明,我设置了第一个单元测试以扩展LightCodeInsightFixtureTestCase。但是,这无法通过setUp方法,抛出NoClassDefFoundErrors。请参阅错误here的要点(picocontainer是冲突的依赖关系)。

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

此处提供了以这种方式失败的项目的小型自包含示例:https://github.com/holger-s/libraryconflict

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


完全披露:我在IntelliJ插件开发论坛上有also sought an answer

1 个答案:

答案 0 :(得分:1)

所以这已经很晚了,但遇到了同样的问题,我通过在Project Structure / Libraries下添加库来修复它,然后转到Modules / Dependencies,并将范围更改为Provide。

https://confluence.jetbrains.com/display/PhpStorm/Setting-up+environment+for+PhpStorm+plugin+development