Hi,
today I finished the implementation of a new advisor [NestedJarProjectCoordinateAdvisor]
(Marcel provided a first draft last week.).
You can find the corresponding change in gerrit [1].
By default the NestedJarProjectCoordinateAdvisor
is disabled (Because it is only needed in special cases and
also has side effects. See below)
If you want to activate it, you have to manipulate the preference
file manually. (The preference page to configure this in a more comfortable way is currently in CQ).
To activate the advisor you have to add in .metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.recommenders.models.rcp.prefs
the following line:
advisor.list.sorted=org.eclipse.recommenders.internal.models.rcp.ManualProjectCoordinateAdvisor;org.eclipse.recommenders.models.advisors.MavenPomPropertiesAdvisor;org.eclipse.recommenders.models.advisors.JREExecutionEnvironmentAdvisor;org.eclipse.recommenders.models.advisors.JREReleaseFileAdvisor;org.eclipse.recommenders.models.advisors.JREDirectoryNameAdvisor;org.eclipse.recommenders.models.advisors.MavenPomXmlAdvisor;org.eclipse.recommenders.models.advisors.ModelIndexBundleSymbolicNameAdvisor;org.eclipse.recommenders.models.advisors.ModelIndexFingerprintAdvisor;org.eclipse.recommenders.models.advisors.OsgiManifestAdvisor;org.eclipse.recommenders.models.advisors.MavenCentralFingerprintSearchAdvisor;org.eclipse.recommenders.internal.models.rcp.NestedJarProjectCoordinateAdvisor;
---------
The new advisor was recommended to handle a special case described
in the following:

Here we have got a project (Test) which we can identify. In
this case we get groupid, artifactid and version out of the pom.xml.
In the project we have a nested jars (l1.jar) which itself
don't include any information to identify it.
So the mapping between DependencyInfo and ProjectCoordinate looks
like:

The new requirement was that the coordinate for the nested jar (l1.jar)
should be the same as the coordiante for the surrounding project
when the jar can't be identified. The NestedJarProjectCoordinateAdvisor
take care of this requirement: Every jar in a project gets the
coordinate of the surrounding project.

As we see the nested jar l1.jar is now mapped to the
coordinate of the surrounding project.
But we also see that this advisor should only be a fallback
strategy which should only be used when all other strategie fails.
This strategy should always be the last strategy in the order!
Another side-effect is that when we have more than one project
which contains the same jars they are shown in the Project
Coordinates View repeated - for each project once.
Having a workspace with many projects can make this view
useless:
The NestedJarProjectCoordinateAdvisor provide
the required functionality. But the question that arises is whether
this is the best solution?
An alternative would be to provide a better manual mapping support
with multi selection and multi assignment to simplify the manual
mapping process. Also an export/import functionality for the manual
mappings could help since this would enable the sharing of manual
mappings between users. Using the manual mappings for this special
case sounds suitable (therefor they were introduced). I would
suggest to improve the manual mapping configuration in the
future to displace the NestedJarProjectCoordinateAdvisor
with a better fitting solution.
What do you think?
Regards,
Olav
[1] - https://git.eclipse.org/r/#/c/18338/
|