Thursday, December 15, 2005

How to split eclipse plugins into features?

At the eclipse council meeting this week, we discussed pluging dependencies. There was some controversy on how to split features.

I think installable features should minimize external dependencies. If possible, put plugins that have no external dependencies (=depend only to the platform) into a feature. And put plugins with external dependencies into other features.

Some (bad) examples to illustrate the problem, of what happens if you create features that contain everything:

At the level of features EMF requires JDT. This means: although you can have a meaningful set of plugins (that is the EMF runtime) that do not require JDT, there is currently no way to properly install EMF without installing JDT (else you get some kind of errors in the error log).

The other bad example is the PDE error log: If you want to use the PDE error log, you have to install PDE and JDT. In practice, you can simply install org.eclipse.pde.runtime, and it works fine. However, if someone installs PDE in another extension location, eclipse will complain.

Therefore, installable features should allow you to use a "meaningful" set of plugins without pulling in the rest of the world...

Take-home message: When you create features ask yourself if there is a useful subset of plugins that has minimal external dependencies and create a feature for those. Others using these plugins will not be forced to install the rest.