You'll have to write the classpath stuff manually, although that's not a bad idea for a plugin to provide (stay tuned...). What else, specifically, are you looking to add into your Manifest file?
~~ Robert. On 11 October 2010 12:01, Alessandro Novarini <a.novar...@sourcesense.com>wrote: > Yes, the package was meant to be just an osgi bundle, there is no way > to run it as a stand-alone app anyway. > I'll try to follow your advice for the dependency issue. > > When I run gradle assemble I get the following manifest: > > Manifest-Version: 1.0 > Export-Package: > com.acme.prj;uses:="org.apache.commons.digester,javax.xml.parsers, > org.w3c.dom.ls,org.w3c.dom,org.w3c.dom.bootstrap";version="2.3" > Private-Package: org.apache.commons.* > Tool: Bnd-0.0.384 > Bundle-Name: overwrittenSpecialOsgiName > Created-By: 1.6.0_20 (Apple Inc.) > Bundle-Version: 2.3 > Bnd-LastModified: 1286812061592 > Embed-Transitive: true > Bundle-ManifestVersion: 2 > Import-Package: > > com.acme.prj;version="2.3",javax.xml.parsers,org.apache.commons.digester;version="2.1",org.w3c.dom,org.w3c.dom.bootstrap, > org.w3c.dom.ls > Bundle-SymbolicName: .something > Embed-Dependency: commons-*;scope=compile|runtime > > Some differences are found in the values related to each package > instruction, and there's no dependency jar included in the final > package, of course. > You've caught a good point noticing that there's no Bundle-ClassPath > instruction; is it something I have to write explicitly in the plugin > configuration or it's supposed to exist because the dependencies? > > Thank you very much for you time and consideration > Ale > > On Mon, Oct 11, 2010 at 5:40 PM, Robert Fischer > <robert.fisc...@smokejumperit.com> wrote: > > The reason the jar-in-jar thing works is because it's specified using > > Bundle-ClassPath: that works just for the JAR being run as an OSGi > bundle, > > and won't help you if you execute the JAR directly or from outside of > OSGi. > > I'd suggest adding the dependencies from the configuration into the jar > > task's "from" properties, although that might you get you into > > resolution-time issues. > > What is failing to happen with that configuration? It looks like it'd > work > > for me. > > > > ~~ Robert. > > > > On 11 October 2010 11:34, Alessandro Novarini < > a.novar...@sourcesense.com> > > wrote: > >> > >> Thank you for your reply. > >> > >> I'll try to explain better my purpose here, my fault in the previous > >> mail, sorry: > >> > >> I have a java project built using maven; this project is an osgi > >> bundle, and it's built using maven-bundle-plugin, which in turn uses > >> bnd like osgi plugin for gradle. > >> > >> What I would like to do is to create a package with gradle that's the > >> exact copy of the one generated using maven. > >> > >> The manifest created by maven is the following: > >> > >> Manifest-Version: 1.0 > >> Export-Package: > >> > >> com.acme.prj;uses:="org.w3c.dom.ls > ,javax.xml.parsers,org.w3c.dom,org.w3c.dom.bootstrap";version="0.0.1" > >> Private-Package: > >> > >> > org.apache.commons.beanutils,org.apache.commons.beanutils.converters,org.apache.commons.beanutils.expression,org.apache.commons.beanutils.locale,org.apache.commons.beanutils.locale.converters,org.apache.commons.collections,org.apache.commons.digester,org.apache.commons.digester.parser,org.apache.commons.digester.plugins,org.apache.commons.digester.plugins.strategies,org.apache.commons.digester.substitution,org.apache.commons.digester.xmlrules,org.apache.commons.logging,org.apache.commons.logging.impl > >> Ignore-Package: org.apache.log,org.apache.avalon.framework.logger > >> Bundle-ClassPath: > >> > >> > .,commons-beanutils-1.8.0.jar,commons-digester-2.0.jar,commons-logging-1.1.1.jar > >> Built-By: me > >> Tool: Bnd-0.0.255 > >> Bundle-Name: acme - useless project > >> Created-By: Apache Maven Bundle Plugin > >> Build-Jdk: 1.6.0_20 > >> Bundle-Version: 0.0.1 > >> Bnd-LastModified: 1286810196596 > >> Embed-Transitive: true > >> Bundle-ManifestVersion: 2 > >> Embed-Dependency: commons-*;scope=compile|runtime > >> Import-Package: > >> > >> > com.acme.prj;version="0.0.1",javax.servlet,javax.xml.parsers,javax.xml.validation,org.apache.commons.collections.comparators,org.apache.commons.collections.keyvalue,org.apache.commons.collections.list,org.apache.commons.collections.set,org.apache.log4j,org.w3c.dom,org.w3c.dom.bootstrap, > org.w3c.dom.ls,org.xml.sax,org.xml.sax.helpers > >> Bundle-SymbolicName: com.acme.prj > >> > >> The configuration in the pom.xml is the following: > >> <configuration> > >> <instructions> > >> > <Export-Package>com.acme.prj.*;version=${pom.version}</Export-Package> > >> > >> > > <Import-Package>!org.apache.log|org.apache.avalon.framework.logger,*</Import-Package> > >> <Embed-Dependency>commons-*;scope=compile|runtime</Embed-Dependency> > >> <Embed-Transitive>true</Embed-Transitive> > >> </instructions> > >> </configuration> > >> > >> The critical parts to me, because I can't figure out how I can > >> reproduce them with gradle, are the Import,Export and Private Package > >> and the Embed-Dependency. Taking and copying them 'as is' doesn't > >> work; here my last attempt: > >> > >> jar { > >> manifest { > >> version = 2.3 > >> name = 'overwrittenSpecialOsgiName' > >> instruction 'Embed-Dependency', 'commons-*;scope=compile|runtime' > >> instruction 'Private-Package', 'org.apache.commons.*' > >> instruction 'Export-Package', "com.acme.prj.*;version=$version" > >> instruction 'Import-Package', > >> '!org.apache.log|org.apache.avalon.framework.logger,*' > >> instruction 'Embed-Transitive', 'true' > >> } > >> } > >> > >> The jar inside the jar thing, well, I really don't know why it was > >> done in that way, but for sure it works, and honestly I can't think > >> another way to put a dependency that's not shared among all bundles in > >> a different way. > >> > >> I apologize for this - too - long email, I hope you don't get bored > >> while reading, but I don't have a clue at the moment. > >> > >> Thanks again for the kind support > >> Ale > >> > >> On Mon, Oct 11, 2010 at 4:37 PM, Robert Fischer > >> <robert.fisc...@smokejumperit.com> wrote: > >> > If you already have a Manifest file generated, you're going to have to > >> > configure the jar task's manifest file given the existing one. I'm > not > >> > entirely sure about the best way to do that. > >> > What's your purpose in including the Apache-Commons JAR file within > your > >> > generated JAR? You can, of course, add the JAR file itself into your > >> > JAR by > >> > adding the JAR into the resources source set, but unless I'm mistaken, > >> > the > >> > classloader won't know how to load classes from that internal JAR. > >> > The other option is to create a fat jar by merging the other jar and > >> > your > >> > generated jar. That can cause problems with licensing, if you're not > >> > careful. > >> > > >> > ~~ Robert. > >> > > >> > On 8 October 2010 15:33, Alessandro Novarini > >> > <a.novar...@sourcesense.com> > >> > wrote: > >> >> > >> >> Hi all, > >> >> Reading both gradle and bnd documentation didn't help me to find > >> >> answers to the following questions, I hope you can turn the light on > >> >> and make me see the truth on the OSGI plugin: > >> >> > >> >> Instructing properly the plugin > >> >> The gradle documentation says: "The classes in the classes dir are > >> >> analyzed regarding there package dependencies and the packages they > >> >> expose. Based on this the Import-Package and the Export-Package > values > >> >> of the OSGi Manifest are calculated." > >> >> > >> >> I can't understand what I have to do in this situation, because > >> >> neither Import-Package nor Export-Package instructions are included > in > >> >> the generated manifest file. > >> >> So, how does the plugin know which are the packages to be imported > and > >> >> which are the ones to export? > >> >> > >> >> Private Package instruction > >> >> In the example 26.2 of the gradle documentation the instruction > >> >> 'Private-Package" has a list of packages explicitly written. > >> >> In my example I want to make private the package > org.apache.commons.*, > >> >> so that in the manifest file I'll see org.apache.commons.beanutils, > >> >> org.apache.commons.beanutils.converters etc. etc. > >> >> The wildcard * doesn't expand the package list, all I see in the > >> >> manifest is the string org.apache.commons.*. Is there a way to > achieve > >> >> this goal? > >> >> > >> >> Including dependencies > >> >> Continuing with the example above, is there a way to include the jar > >> >> of apache-commons in my jar using some feature of the plugin? Or > >> >> should I add in some way scripting my build? > >> >> > >> >> All these questions came out because I already have a manifest file > of > >> >> this project generated by the maven plugin (that uses bnd as well), > >> >> and I would like to reproduce the exact output using gradle, but I'm > >> >> far from the expected. > >> >> > >> >> Thank you in advance > >> >> Ale > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe from this list, please visit: > >> >> > >> >> http://xircles.codehaus.org/manage_email > >> >> > >> >> > >> > > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe from this list, please visit: > >> > >> http://xircles.codehaus.org/manage_email > >> > >> > > > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > >