[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cbi-dev] What is copied by CBI aggregator and why?
|
Hi everybody,
I just started to use CBI aggregator (headless from the precompiled
archives) and I think I got the main ideas of how to work with it.
However, the validation and in general the behavior of the p2 planner
puzzles me. My goal is to create a maven repository containing all
(p2-)dependencies of one of my projects as maven artifacts. Please allow
me to introduce the rather small aggregator model I am using.
<?xml version="1.0" encoding="UTF-8"?>
<aggregator:Aggregation xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aggregator="http://www.eclipse.org/cbi/p2repo/2011/aggregator/1.1.0"
label="dependency repo" buildRoot="../m2Repo" packedStrategy="UNPACK"
type="M" mavenResult="true" versionFormat="MavenRelease">
<validationSets label="Henshin">
<contributions label="Henshin">
<repositories
location="http://download.eclipse.org/modeling/emft/henshin/updates/nightly">
<bundles name="org.eclipse.emf.henshin.interpreter"/>
<bundles name="org.eclipse.emf.henshin.model"/>
</repositories>
</contributions>
<contributions label="Eclipse">
<repositories location="http://download.eclipse.org/releases/2019-03">
<bundles name="org.eclipse.emf.ecore.xmi"/>
</repositories>
</contributions>
</validationSets>
<configurations architecture="x86_64"/>
</aggregator:Aggregation>
The Henshin bundles are the direct dependencies of my project.
Therefore, I selectively choose to only copy the ones I need from the
respective p2 update site.
Henshin itself is based on other parts of the Eclipse Modeling Framework
(EMF) which in turn needs some other Eclipse bundles. That's what the
Eclipse contribution is about.
As you can see, there is a single bundle definition for the associated
repository. From the documentation in the wiki I would have expected
that only this single bundle should be copied to the output repository.
Defining Bundle components allows addition of individual Eclipse
bundles to the aggregation to be specified (rather than the complete
contents of a given Mapped Repository).
However, it seems like all transitive dependencies of the specified
Henshin bundles are copied. What is more, it doesn't even matter which
specific dependency I add as a bundle definition. Whatever I specify
there I get the same 24 bundles copied to created repository. Using this
repo, my projects builds (with a Maven pom-first approach).
Interestingly, the repository contains two bundles which are not showing
up in the dependency tree build by Maven (com.ibm.icu and a.jre.javase).
Unfortunately, I could not find a way to let CBI aggregator tell me why
these bundles were added. Even in DEBUG logLevel no information about
the dependencies are revealed.
On the other hand, removing all bundle definitions for the Eclipse
repository I would expect the whole repository to be copied. Instead an
exception is thrown:
Build failed! Exception was org.eclipse.core.runtime.CoreException:
Cannot complete the install because some dependencies are not
satisfiable Software being installed: validationSet_Henshin 1.0.0
Cannot satisfy dependency:
mappedRepo_download.eclipse.org_releases_2019-03 1.0.0 depends on:
org.eclipse.equinox.p2.iu; org.eclipse.emf.rap.sdk.feature.group 0.0.0
Cannot satisfy dependency:
mappedRepo_download.eclipse.org_releases_2019-03 1.0.0 depends on:
org.eclipse.equinox.p2.iu; org.eclipse.platform.feature.group 0.0.0
Cannot satisfy dependency: org.eclipse.emf.rap.sdk.feature.group
2.17.0.v20190226-1307 depends on: org.eclipse.equinox.p2.iu;
org.eclipse.platform.feature.group 0.0.0 Cannot satisfy dependency:
validationSet_Henshin 1.0.0 depends on: org.eclipse.equinox.p2.iu;
mappedRepo_download.eclipse.org_releases_2019-03 [1.0.0,1.0.0]
I guess, this is caused by the aggregator not considering anything in
that repository (instead of everything as I expected). The same happens
when I add an exclusion on the seemingly unnecessary com.ibm.icu bundle
to the above model.
<mapRules xsi:type="aggregator:ExclusionRule" name="com.ibm.icu"/>
Overall the following questions go around in my head:
a) What would one need to specify to get all bundles of a repository?
b) Why do I get all dependencies when I specify a single bundle? Can I
expect the aggregator to always at least copy all the dependencies?
c) Is there a way to show the dependency tree which is used during
validation?
Any helpful explanations are appreciated. Maybe I just overlooked
relevant parts of the documentation.
Best wishes,
Stefan