Hi all
Short story:
- Using "Import-Package: *" generates mandatory imports,
do you know how to instruct bnd tool in the .bnd property file to scan
imports and set them as with "resolution:=optional"?
- "Bundle-Version: 2.6.0.rc1" is hard coded,
do you know how to use external Ant variables in a .bnd property file when
using Ant tasks?
Long story:
I have made a GWT demo project that works into Servicemix 4.5.3 (I will
publish it as soon as I have some more time),
by now it resolves the dependency with gwt-servlet by installing the
following bundle:
install -s
wrap:mvn:com.google.gwt/gwt-servlet/${gwt.version}$Bundle-SymbolicName=gwt-servlet
It creates a huge manifest for the GWT-Servlet, it heavily make use of
optional imports, the demo is just a simple example with 1 server side GWT
Rpc Service (-> a servlet), but it works.
I then tried to automate the generation of OSGi Manifest into the build
lifecycle of GWT so that the original Jar in the GWT distribution is ready
for deployment to OSGi without wrapping it, but here things get a little
harder.
The "bnd" ant task is hard to fit GWT lifecycle as the GWT-Servlet Jar is a
subset of classes extracted from GWT-User and GWT-Dev.
I think using "bndwrap" ant task and post process GWT-Servlet is
preferable.
I tried first by wrapping the Jar on the command line and I made a simple
.bnd file with the following options contents:
Bundle-Name: Google Web Toolkit :: Servlet
Bundle-SymbolicName: gwt-servlet
Bundle-Version: 2.6.0.rc1
Export-Package: *
Import-Package: *
I got an osgi-fied bundle, I deployed it replacing the one created with
wrap: deployer but this new one does not get resolved:
the difference is that the made with wrap deployer sets all Imports as
optional.
It sound reasonable to me, as the classes in the GWT-Servlet have been
accurately selected by GWT committers (remember GWT-Servlet comes from a
subset of GWT-Dev and GWT-User) and may have many java imports of classes
not required on the server but are still referenced in the bytecode.
Ideally, we should create a .bnd file that only specify the right Package
Imports and Exports, but I don't have ideas on how to make it simple.
I guess the best would be to make a first step and achieve having an
initial bundle with imports as optional but I don't know how to specify
this to bnd for Import-Packages... (see initial question).
Anyone can suggest me how to do it?
Here, if someone is interested, are the headers of the two bundles:
This one works
https://gist.github.com/cristcost/7332635#file-gwt-servlet-osgi-headers-with-wrap
This one don't
https://gist.github.com/cristcost/7332635#file-gwt-servlet-osgi-headers-from-command-line-bnd
I'll keep you updated as I try to progress further.
;-)
Cristiano
PS. Here are the Ant rules for selecting what to put inside the GWT-Servlet
JAR. Any Idea on how to create more fine tuned .bnd files from these rules?
<fileset dir="${gwt.dev.bin}">
<include name="com/google/gwt/dev/asm/**" />
<include name="com/google/gwt/dev/util/Name*.class" />
<include name="com/google/gwt/dev/util/StringKey.class" />
<include name="com/google/gwt/util/tools/shared/**" />
<include name="com/google/gwt/core/shared/**" />
</fileset>
<fileset dir="${gwt.user.bin}">
<exclude name="**/rebind/**" />
<exclude name="**/tools/**" />
<exclude name="**/super/**" />
<exclude name="com/google/gwt/json/**" />
<exclude name="com/google/gwt/junit/*" />
<exclude name="com/google/gwt/junit/client/GWTTestCase.*" />
<exclude name="com/google/gwt/junit/remote/**" />
<exclude name="com/google/gwt/junit/server/**" />
<exclude name="com/google/gwt/benchmarks/*" />
<exclude name="**/*.gwtar" />
</fileset>