Plugin runner problem when building plugin with Maven

Hi,

I'm developing a plugin using Maven as the build tool and I have listed the openapi.jar, et al. in the POM as dependencies so that Maven can compile the project.  However when I try to run the plugin the plugin runner automatically copies all dependencies to the sandbox, including the openapi.jar file, even though it is not needed and listed as system scope in the POM.  This causes some sort of conflict in the classpath that results in an error[1] in the IDEA log file.  If I remove the extraneous jar files from the sandbox/plugins/my-plugin/lib directory and run IDEA by hand (from the Windows shell) it works fine.

I would really like to be able to use the plugin runner since it's so convenient, so does anyone have any suggestions on how I can prevent the the dependencies that are not compile scope from being copied to the sandbox/plugins/my-plugin/lib directory?  (any other suggestions are also welcome)

My environment:
Windows XP SP2
IDEA 7.0.4
Java 1.6.0_07

The plugin has only one component, a project component that lists com.intellij.openapi.project.Project in the constructor as the only argument. e.g.:

public class FooPlugin implements ProjectComponent
{
    public FooPlugin(Project project)
    {
        ...
    }
}

[1] Sample log output:

2009-02-13 13:51:28,313 [  48422]  ERROR - ij.components.ComponentManager - 
org.picocontainer.defaults.UnsatisfiableDependenciesException: com.acme.FooPlugin has unsatisfied dependency: interface com.intellij.openapi.project.Project among unsatisfiable dependencies: [[interface com.intellij.openapi.project.Project]] where AreaPicoContainer.MyPicoContainer[com.intellij.openapi.project.impl.ProjectImpl@1f068b9] was the leaf container being asked for dependencies.
at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getGreediestSatisfiableConstructor(ConstructorInjectionComponentAdapter.java:191)
at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:210)
at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
at org.picocontainer.defaults.DecoratingComponentAdapter.getComponentInstance(DecoratingComponentAdapter.java:60)
at org.picocontainer.defaults.CachingComponentAdapter.getComponentInstance(CachingComponentAdapter.java:58)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:1)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:7)
at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:199)
at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:186)
at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:168)
at org.picocontainer.alternatives.AbstractDelegatingMutablePicoContainer.getComponentInstance(AbstractDelegatingMutablePicoContainer.java:75)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:163)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:147)
at com.intellij.openapi.components.impl.ComponentManagerImpl.initComponents(ComponentManagerImpl.java:160)
at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:97)
at com.intellij.openapi.project.impl.ProjectImpl.init(ProjectImpl.java:59)
at com.intellij.openapi.project.impl.ProjectManagerImpl.getDefaultProject(ProjectManagerImpl.java:67)
at org.jetbrains.idea.maven.indices.MavenIndicesManager.doInit(MavenIndicesManager.java:62)
at org.jetbrains.idea.maven.indices.MavenIndicesManager.initComponent(MavenIndicesManager.java:55)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:96)
at com.intellij.openapi.components.impl.ComponentManagerImpl.access$1100(ComponentManagerImpl.java:7)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:15)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:7)
at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:199)
at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:186)
at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:168)
at org.picocontainer.alternatives.AbstractDelegatingMutablePicoContainer.getComponentInstance(AbstractDelegatingMutablePicoContainer.java:75)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:163)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:147)
at com.intellij.openapi.components.impl.ComponentManagerImpl.initComponents(ComponentManagerImpl.java:160)
at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl.load(ApplicationStoreImpl.java:13)
at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:162)
at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:54)
at com.intellij.idea.MainImpl$3.run(MainImpl.java:1)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at com.intellij.ide.IdeEventQueue.c(IdeEventQueue.java:146)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:63)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:87)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
2009-02-13 13:51:28,329 [  48438]  ERROR - ij.components.ComponentManager - JDK: 1.6.0_07
2009-02-13 13:51:28,329 [  48438]  ERROR - ij.components.ComponentManager - VM: Java HotSpot(TM) Client VM
2009-02-13 13:51:28,329 [  48438]  ERROR - ij.components.ComponentManager - Vendor: Sun Microsystems Inc.
2009-02-13 13:51:28,329 [  48438]  ERROR - ij.components.ComponentManager - OS: Windows XP
2009-02-13 13:51:28,329 [  48438]  ERROR - plication.impl.ApplicationImpl - 
java.lang.AssertionError: Can't instantiate component for: class com.acme.FooPlugin
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:14)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:147)
at com.intellij.openapi.components.impl.ComponentManagerImpl.initComponents(ComponentManagerImpl.java:160)
at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:97)
at com.intellij.openapi.project.impl.ProjectImpl.init(ProjectImpl.java:59)
at com.intellij.openapi.project.impl.ProjectManagerImpl.getDefaultProject(ProjectManagerImpl.java:67)
at org.jetbrains.idea.maven.indices.MavenIndicesManager.doInit(MavenIndicesManager.java:62)
at org.jetbrains.idea.maven.indices.MavenIndicesManager.initComponent(MavenIndicesManager.java:55)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:96)
at com.intellij.openapi.components.impl.ComponentManagerImpl.access$1100(ComponentManagerImpl.java:7)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter$1.getComponentInstance(ComponentManagerImpl.java:15)
at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:7)
at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:199)
at com.intellij.util.pico.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:186)
at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:168)
at org.picocontainer.alternatives.AbstractDelegatingMutablePicoContainer.getComponentInstance(AbstractDelegatingMutablePicoContainer.java:75)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:163)
at com.intellij.openapi.components.impl.ComponentManagerImpl.a(ComponentManagerImpl.java:147)
at com.intellij.openapi.components.impl.ComponentManagerImpl.initComponents(ComponentManagerImpl.java:160)
at com.intellij.openapi.components.impl.stores.ApplicationStoreImpl.load(ApplicationStoreImpl.java:13)
at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:162)
at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:54)
at com.intellij.idea.MainImpl$3.run(MainImpl.java:1)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at com.intellij.ide.IdeEventQueue.c(IdeEventQueue.java:146)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:63)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:87)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
2009-02-13 13:51:28,344 [  48453]  ERROR - plication.impl.ApplicationImpl - JDK: 1.6.0_07
2009-02-13 13:51:28,344 [  48453]  ERROR - plication.impl.ApplicationImpl - VM: Java HotSpot(TM) Client VM
2009-02-13 13:51:28,344 [  48453]  ERROR - plication.impl.ApplicationImpl - Vendor: Sun Microsystems Inc.
2009-02-13 13:51:28,344 [  48453]  ERROR - plication.impl.ApplicationImpl - OS: Windows XP

5 comments
Comment actions Permalink

Hi,

Do you import the Maven project into IDEA or just use command line tool?
In either case please try setting dependencies (i.e. for openapi.jar) scope to provided. This way they souldn't be copied to the resulting package.

Thanks,
Anton Makeev

0
Comment actions Permalink

Hi Anton,

Thanks for your reply.  I'm using imported projects, and unfortunately setting the OpenAPI jar files to either system or provided scope does not effect their being copied to the plugin sandbox directory when using the plugin runner.

Thanks,
Kevin

0
Comment actions Permalink

Kevin,
Please attach your pom files, I'll take a look and make somethong up.

Thanks,
Anton Makeev

0
Comment actions Permalink

Hi,

I've attached a santized version of the POM file below, it is the same as what I'm using minus a couple of private jar dependency listings.

Thanks,
Kevin



Attachment(s):
pom.xml
0
Comment actions Permalink

Hi, Kevin,

We'll try to invent a good solution for this configuration lately. Unfortunately maven layout here conflicts with an expected IDEA plugin layout and at the moment the only workaround I can think of is to manually remove redundant dependencies from after import. To not to repeat this operation on every import, you may remove classes entries from these libraries and leave the libraries.

IDEA plugin module requires special SDK configured, all corresponding IDEA libraries must be added there.

Thanks,
Anton Makeev

0

Please sign in to leave a comment.