Cannot create applicationListener in optional plugin dependency because of a ClassNotFoundException
I am using application-level Listeners (https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_listeners.html) to listen to VFS events in my plugin.
This works well when I define the <applicationListener> in my plugin.xml. However some listeners should only run if a specific plugin dependency is present, so I used optional plugin dependencies in my plugin.xml (https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_dependencies.html#optional-plugin-dependencies). When I declare a <applicationListener> in a separate file I get an exception when my plugin is loaded. Any idea what is causing this and how I can fix it?
Example code:
plugin.xml
<depends optional="true" config-file="jsp.xml">com.intellij.jsp</depends>
jsp.xml
<applicationListeners>
<listener class="my.JspListener" topic="com.intellij.openapi.vfs.newvfs.BulkFileListener" />
</applicationListeners>
When running that plugin I get the following exception:
com.intellij.diagnostic.PluginException: Cannot create listener my.JspListener
at com.intellij.serviceContainer.ComponentManagerImpl.createListener(ComponentManagerImpl.kt:716)
at com.intellij.util.messages.impl.MessageBusImpl.subscribeLazyListeners(MessageBusImpl.java:204)
at com.intellij.util.messages.impl.MessageBusImpl.calcSubscribers(MessageBusImpl.java:320)
at com.intellij.util.messages.impl.MessageBusImpl.getTopicSubscribers(MessageBusImpl.java:366)
at com.intellij.util.messages.impl.MessageBusImpl.postMessage(MessageBusImpl.java:344)
at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:396)
at com.intellij.util.messages.impl.MessageBusImpl.lambda$createTopicHandler$3(MessageBusImpl.java:237)
at com.sun.proxy.$Proxy143.before(Unknown Source)
at com.intellij.openapi.vfs.newvfs.persistent.PersistentFSImpl.processEvents(PersistentFSImpl.java:987)
at com.intellij.openapi.vfs.newvfs.AsyncEventSupport.processEvents(AsyncEventSupport.java:124)
...
Caused by: java.lang.ClassNotFoundException: my.JspListener
at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:328)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at com.intellij.serviceContainer.ComponentManagerImpl.createListener(ComponentManagerImpl.kt:713)
I am using IntelliJ 2020.1.2 Ultimate Edition.
请先登录再写评论。
Dominik,
Thanks for reporting.
It's a known issue tracked with IDEA-231568. It is fixed and will be released with 2020.2