Hi Alain,
I know that Lucene itself contains split-packages in lucene-core.jar and
lucene-analyzer-common.jar. The split-package there is e.g.
org.apache.lucene.analysis.standard. When OSGi-fying them, we put the
two jars into one OSGi bundle.
Currently we use bnd, to do that. In former times we used the
maven-bundle-plugin with this instruction e.g.
<Embed-Dependency>lucene-analyzers-common;inline=true,lucene-core;inline=true</Embed-Dependency>
You also have to take care about all external dependencies of e.g.
lucene analyzers or spatial, like morfologic, uima, spatial4j,
jakarta-regexp. You may need to OSGi-fy these dependencies and their
transient dependencies too.
After OSGi-fying the jars, we executed an additional build step to
create the p2 update site using maven-tycho. In addition to the
OSGi-fied jars there are other transient dependencies. For Lucene we
identified:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</dependency>
We took these bundles from the standard Eclipse repository or the
Eclipse Orbit update site.
This belongs only to the Lucene stuff. Maybe you have to do the same
work for the ES stuff. We never used require-bundle, it worked well out
of the box with package ex- and imports. Using a mega-lucene bundle with
all dependencies, was our first approach ad worked well too. But don't
forget, to put the Java service files as well in the bundles, because
Lucene uses the service loader.
I hope this helps.
Mark
Am 31.12.18 um 12:19 schrieb Alain Picard via osgi-dev:
I am trying to convert a bundle of ours that now simply imports jars
for Elasticsearch and make it a p2 site with p2-maven-plugin that
usesthe maven-bundle-plugin/bnd to wrap non-OSGi jars.
I ended up with resolution errors since ES has about 7-8 split
packages, most notably org.elasticsearch.client and
org.elasticsearch.common. So I went searching for solutions that I've
seen before but never had to use them. I cam across
https://eclipsesource.com/blogs/2008/08/22/tip-split-packages-and-visibility/
from Chris and http://web.ist.utl.pt/ist162500/?p=65.
I first tried to simply create a "bridge" bundle that simply requires
the ES bundles and re-export them and import the bridge bundle from my
"search bundle". That didn't solve the problem, same issue with
imports of split-packages.
Next I added attribute and mandatory, even if here I was relying on
require-bundle (not what I normally do). In my bridge bundle I added
all the over 300 export-package for the 5 ES bundles, w/o any extra.
This resulted in an error for each export of the form: Package
'org.elasticsearch.action.admin.cluster.allocation' does not exist in
this plug-in. In the search bundle, with a require bundle of the
bridge bundle, w/o the export packages it would not resolve any ES
package and with them in (even with the error) the only issues were
with the split package. I also tried in the search bundle to instead
import the packages, with the same result.
I'm getting to the point where I feel I might just have to either go
back to the original approach or create a bundle that just handles the
ES dependencies with bundle-classpath and export-pacakges of all those.
Any idea where I'm going wrong?
Thanks
Alain
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev