> Generally what I would do is get the Platform SDK, make sure no repositories, other than the Eclipse Platform's repository, are enabled, and they try to install all your features. If something doesn't resolve, you'd need to add a repository for that or consider whether that thing should be in your repository. I think it's good to reuse the third-party libraries of your dependencies (use the same version), but it's not good if some user needs to add Orbit to the available repositories in order to install your features.
This sounds like the good practice I would expect. I thought this particular piece of good practice was documented somewhere, but I can't find it and it seems to have been a good practice passed down via word of mouth until now.
That's a good question. I suppose it could be formulated as some
type of best practice, but of course it would be good when most
people agree on the best practice.
Generally what I would do is get the Platform SDK, make sure no
repositories, other than the Eclipse Platform's repository, are
enabled, and they try to install all your features. If something
doesn't resolve, you'd need to add a repository for that or
consider whether that thing should be in your repository. I
think it's good to reuse the third-party libraries of your
dependencies (use the same version), but it's not good if some
user needs to add Orbit to the available repositories in order to
install your features.
For many/most projects, they have all kinds of upstream project
dependencies, so things get more complicated in that case and
you'd want to add the repo for that project. This might be
helpful for finding such a repo:
I don't think one typically wants to replicate the content of
some project on which you depend, but you might create a composite
that refers such dependencies or reference the repository...
On 14.01.2022 11:49, Alexander Fedorov
wrote:
Thank you for the comprehensive analysis, Ed!
Do you think it could be formulated like a set of rules and
practices for the Project Handbook?
It would be great to understand how to stop being disabled in the
SimRel in the right way.
Thanks,
AF
1/14/2022 12:08 PM, Ed Merks пишет:
I'm not sure these are entirely good ideas, though certainly
sensible in principle. The devil is in the details...
In the other related thread (about Passage) it was suggested
to "mirror dependencies in project's own p2 repo" but that
isn't an entirely clear statement. In particular, one might
take that literally and too broadly. E.g., I don't want my
Oomph repository to mirror all its dependencies
because I don't want my repository to include dependencies
from all these other projects that Oomph directly depends
upon, other than Orbit things "of course," though why Orbit
and not the other ones? So I definitely do not want
include all "includeAllDependencies".
Without guidance on what should be in your own
repository, why it should be in your own repository,
and how you should ensure that it ends up in your own
repository, we have a team of downstream people with open
questions.
Suppose we remove Orbit from the above graph, which is the
stated goal. All the things available in Orbit that are
needed by other projects will then have to come from
repositories of other projects. Again, that's fine and good
and is the goal. But, Mylyn could change its aggrcon to
reference the Orbit repo that resolves their requirements.
That would clearly not improve things. It would mask the
other problems in the other projects because the aggregator
doesn't care from where things are resolved. I guess there is
a rule that no one should do that? Mylyn could also change
their repository to reference (or compose) the Orbit
repository, which would have the same effect, but we'd not
even see that looking at the aggrcons themselves. Would that
be wrong or against some rule?
The bottom line is that I'm sure there are many
projects that depend on "Orbit contributions" that are in fact
contributed by other projects rather their own project, but we
only notice this "Orbit dependency" issue when some project is
the only one with a dependency that is satisfied by neither
itself nor any other project. E.g., Passage is the only one
using log4j2. So, for example, it's okay (apparently) if my
repo doesn't include Orbit dependencies that are
included/provided by the Platform, until the Platform
contributes a version that doesn't satisfy my requirements,
and then it's suddenly not okay because suddenly we notice.
One might even argue it's better that I rely on the Platform
contributing my Orbit dependencies because that way I won't
include a different version leading to the multiple versions
problem and I'll notice when I should move to a new version...
I mention this because it will be surprising later when we
must disable some project only to find out it's the only one
contributing some specific "Orbit dependency" on which a
number of other projects depend.
All that being said, the what and why should be
somewhat more clear to the projects themselves if you ask
yourself, What other repositories must be available in order
for the user to install one more more of your features? Note
that the answer is not at all related to SimRel, but if your
answer is that as long as the SimRel repo is available, it's
fine, then your answer might well be circular...
So how do you ensure that the
necessary/important/right things are in your own repository?
Certainly includeAllDependencies is the big hammer, but do you
really want users to install some snapshot of all your
dependencies? It seems doubtful. The obvious approach is to
include a "missing" plugin in a feature.xml of a feature that
is in your p2 update site because it's mentioned in the
category.xml. But that might not be ideal because you might
be fine with a range of versions and might not want to force
your specific version to be installed (and to be contributed
to SimRel, leading to duplicates). You can also mention such
a plugin directly in your category.xml such that a version is
available, but that one is not necessarily the one that
must/will be installed to make your bundles happy. What we
did in Oomph is to include some Orbit dependencies in a test
feature that is included in the category.xml as uncategorized
and we don't contribute the test feature to SimRel so our
Orbit requirements will (hopefully) be satisfied by other
projects with more restrictive version range requirements that
those of Oomph...
Regards,
Ed
On 14.01.2022 09:50, Christoph
Läubrich wrote:
If
Tycho is used it is probably the easiest to enable
to get the best user experience and fulfill this requirement
without any additional actions.
Am 14.01.22 um 08:43 schrieb Alexander Fedorov:
Hi Jonah,
Since Passage was never depending from Mylyn it was
surprising to see it disabled. As I understood, it was done
because Passage does not mirror all the used Orbit bundles
to its p2 site.
Please don't get me wrong, but the gap between notification
[1] and action seems a bit tight to me: about 1 day without
technical space to fix it.
Perhaps I missed something important during the past years
but the rule to always mirror Orbit dependencies to the
component p2 site was neither clearly articulated nor
enforced previously.
To avoid future misunderstanding I've created a ticket [2]
to improve Project Handbook regrading SimRel participation.
@Wayne, @Alexander please invest your time to polish the
formulation of this [new?] constraint for Eclipse projects
that are willing to participate SimRel.
I would dare to say that as long as the
workarounds are in
simrel nothing will get fixed - it's time to face
reality.
Probably correct, but I don't have the nerve to
disable (or
knowledge/time to fix) Mylyn.
Hi folks,
It is time to remove the temporary workarounds. When I had
a look today I realised that more and more projects are
relying on the temporary workaround initially put in place
for Mylyn.
Over a year ago I filed numerous bugs asking projects to
fix their contributions, some projects were very
responsive and others I have not heard back from.
Therefore for M2 I plan to disable all projects from
SimRel that aren't up to date or have otherwise started
relying on these workarounds. I will submit the following
gerrits[1,2] after 2022-03 M1 is done. Please see the
gerrits for what is disabled. I attempted to only disable
features where possible and not entire contributions.
The affected projects are (with some comments):
- Mylyn (fully disabled Bug 569078)
- Passage (only one feature, so fully disabled)
- DTP (many features, lots because Lucene 7.x is no longer
provided by Eclipse Platform? + Bug 569181)
- WTP (Bug 568136)
- m2e-wtp (JPA related code)
- PDT (Composer feature needs org.apache.commons.exec)
- soa-bpel (depends on disabled WTP features)