Koen, just to check. Remember to actually look at the *generated*
feature.xml/plugin.xml when looking at
what version numbers actually end up in there. This was what put me of for
the first couple of times I saw this bug
reported. I also said: No, we don't put concrete version numbers in
there....but the distribution actually does.
/max
On 9/27/06, Koen Aers <koen.aers(a)jboss.com> wrote:
>
>
>
> In fact this is not true. Eclipse features *are* a packaging mechanism.
> A feature does not *need* anything by itself. Only the plugins in the
> feature have dependencies on other plugins. See :
>
http://dev.eclipse.org/viewcvs/index.cgi/*checkout*/platform-core-home/d
> ocuments/plugin-versioning.html?rev=1.2 for a document stating this. The
> fact that you will not find any Eclipse project that references plugins
> in the feature.xml is due to the fact that they are at the source and
> perfectly capable of defining their own packaging units in which no
> feature contains plugins that appear also somewhere else in other
> features.
Yes, it is true that eclipse features are used for packaging, but the
feature itself also logically separates the idea of "your plugin" (or
"1st
class plugin) from "external or dependency" plugin! There are many
problems
with PDE build... one of the major ones being that the distribution
options
are dismal at best, but not giving us clear separation is not one of
those
problems! All of that being said I think something has been lost in the
debate. Dependencies that are declared in the feature.xml should be
features
only. Technically it is possible to list plugin dependencies in the
feature.xml (and there are features in Eclipse Platform that do it) ,
but I
prefer that plugin dependencies are pulled from plugin.xml, where they
belong. Basically the only reason feature dependencies should be listed
in
feature.xml <import.../> is if you are trying to pull in more
functionality
than you necessarily need, or if you want the actual "feature" directory
and
"feature.xml" that go along with that huge list of plugins in your
distribution. JBossIDE Core does this because we want to re-distribute
stuff
that we don't necessarily "depend" on. Everything else should be in
plugin
dependencies.. ie.....
feature.xml:
<feature id="org.jbpm.gd.jpdl.feature">
<plugin id="org.jbpm.gd.jpdl.ui" ../>
</feature>
plugin.xml:
<plugin id="org.jbpm.gd.jpdl.ui">
<requires>
<import plugin="org.eclipse.gef"/>
</requires>
</plugin>
Instead of duplicating the "org.eclipse.gef" requirement as a <plugin/>
in
feature.xml
As a matter of fact after exploring the different Eclipse projects a bit
> I have found evidence that what you say is not true. Have a look at the
> attached feature.xml files for the rcp feature and for the equinox
> feature and see that they are exactly using the 'evil' way of doing
> things. And I am sure that if I look a bit around I will be able to find
> plugin providers (that are not part of the Eclipse overall project) that
> have also feature.xml files containing references to third party plugins
> in the <plugin> tags.
IMO the two features that you have shown aren't adequate evidence...
both of
these features are using what I consider to be "core" plugins of the
Eclipse
SDK/RCP/platform. These plugins are mixed and matched all over the place
to
create different configurations and feature sets etc. To look at
something
more similar to our use case I think you need to take a look at an WTP
feature which has many "backward" dependencies like we do. If we look at
features/org.eclipse.wst.xml.core/feature.xml I think we will see
something
which is much more "common" place in 2nd/3rd tier features.
I've attached the file for review (and if you look at pretty much any
other
WTP feature you will notice the same pattern).
If you notice, only plugins that are actually 1st-tier are listed as
<plugin>. All dependencies are listed as "imports" via feature-import
(in
this case Platform, RCP, EMF, XSD, etc). This, IMO is the model we
should be
following since it is about as close as you can get to our use case in a
standard eclipse feature.
> This thing we are doing here (with using <plugin> instead of
> > <import>) is actually in the same ballpark since it breaks
> > updatemanagers and depedency checking.
>
> Again, I have completely no evidence that this is happening. In fact,
> the JIRA issue you mention is happening because the update manager is
> looking for particular versions of the plugins stated in the
> feature.xml. But you don't have to state these versions in your
> feature.xml explicitly. If you do not state them explicitly any version
> that is available on the update site will satisfy the requirements.
Yes this specific bug is related to a "specific" version of a plugin
listed
in the plugin.xml. It should be noted that ever since 3.2, "0.0.0" for
your
plugin id is now updated at build time to be the "exact" version that was
there at build time. It is no longer resolved at runtime meaning
dependencies as <plugin/> should NEVER happen!
There is *much* more granular control over dependency versioning in the
<requires><import/> than in <plugin/>. Basically in the plugin tag you
have
2 options:
1) A specific version (bad)
2) 0.0.0 (change to specific version @ build time). (good -- but user
still
sees a specific version at the end of the day in their distribution
which is
*BAD BAD BAD* for dependencies)
In the import tag you have much more control:
1) You don't have to specify a version at all, meaning it should work
with
*any* version of the plugin (there is no static version changing at build
time here)
2) Specify a certain version, and use a "match" qualifier that can be
"equivalent" "greater" "less", etc etc.... this gives us
MUCH more
control
over what we work with and what we don't. This will allow users to
upgrade
to i.e. 1.5.1 while we are still turning the gears on our next release.
--
--
Max Rydahl Andersen
callto://max.rydahl.andersen
Hibernate
max(a)hibernate.org