Hi Cristiano,
For the Import-Package, you should be able to append the resolution directive with a ;, just like you do with the maven-bundle-plugin instructions. Something like *;resolution:=optional should work fine, I think. For the properties, my first suggestion would be to just use plain Ant to copy the file into a working directory and filter those property values first and then point <bnd> to the filtered file, but it looks like there's a <bndexpand> task as well that might be helpful, cfr. https://github.com/bndtools/bnd/wiki/%5Bant%5D-Loading-and-Expanding-Shared-Headers-or-Properties Regards, Gert Vanthienen On Wed, Nov 6, 2013 at 10:14 AM, Cristiano Costantini <[email protected]> wrote: > 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>
