On 19/09/2007, Rodrigo Madera <[EMAIL PROTECTED]> wrote: > > Thank you for your replies. > > However, this comes to mind: > > If your code refers to a class in the org.eclipse.osgi.framework.console > > package, the Bundle plugin will automatically create an import for this > > package. > > This yields a chicken and the egg problem. I use Eclipse with M2 to code. > If the bundle doesn't generate the data at design level, Eclipse is as > good > as notepad.
yes, this is a long-running problem with Eclipse/PDE + Maven :( Eclipse/PDE expects the manifest at the top of the project and uses it to augment the compilation classpath. Maven uses dependencies to augment the compilation classpath and puts generated content in the target folder. unfortunately this can mean that adding an import in the Eclipse/PDE manifest will get things compiling in Eclipse (because the jar is available inside Eclipse) but break Maven because it doesn't know about this dependency. I think there are ways to link the Eclipse installation and maven repository, but haven't tried them myself. Btw, there's also a new plugin for Eclipse called q4e: http://code.google.com/p/q4e which might help you with the dependency management part... I'm still trying out the earlier recommendation and will post results here. > > Thanks, > Rodrigo > > > Regards > > Felix > > > > Am Mittwoch, den 19.09.2007, 12:47 +0800 schrieb Stuart McCulloch: > > > Hi Rodrigo, > > > > > > (I've started a new thread for this topic - rather than have multiple > > topics > > > in one thread) > > > > > > On 19/09/2007, Rodrigo Madera <[EMAIL PROTECTED]> wrote: > > > > > > > > Hello again, > > > > > > > > Comming with another problem, I have a service called Greeter with > > > > GreeterImpl. > > > > The only method available is "public String sayHello()". > > > > > > > > Now I want to create an OSGi command provider for any OSGi shell. > > > > For this, I created GreeterShell. But now I need the interfaces from > > (in > > > > this case) > > > > org.eclipse.osgi.framework.console. > > > > > > > > The problem I have is with importing. In a normal Eclipse project I > > would > > > > add this > > > > to the manifest and all would be solved: > > > > > > > > Import-Package: org.eclipse.osgi.framework.console;version=" > > 1.0.0" > > > > > > > > But I can't figure out how to do this on BND (nor SCR, of course). > > > > How can this be done using the plugins? > > > > > > > > > if your code imports org.eclipse.osgi.framework.console and you have > the > > > console bundle marked as a "provided" maven dependency (which you need > > > for it to compile) then it should be automatically added to the > > manifest. > > > > > > for example, this POM: > > > > > > =================================================================== > > > <?xml version="1.0" encoding="UTF8"?> > > > <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > > > http://maven.apache.org/maven-v4_0_0.xsd" xmlns=" > > > http://maven.apache.org/POM/4.0.0" xmlns:xsi=" > > > http://www.w3.org/2001/XMLSchema-instance"> > > > > > > <modelVersion>4.0.0</modelVersion> > > > <groupId>examples.console</groupId> > > > <artifactId>myConsole</artifactId> > > > <version>1.0-SNAPSHOT</version> > > > > > > <name>myConsole example</name> > > > <packaging>bundle</packaging> > > > > > > <build> > > > <plugins> > > > <plugin> > > > <groupId>org.apache.felix</groupId> > > > <artifactId>maven-bundle-plugin</artifactId> > > > <version>1.0.0</version> > > > <extensions>true</extensions> > > > <configuration> > > > <instructions> > > > <Bundle-Activator>examples.console.internal.Activator > > > </Bundle-Activator> > > > <Private-Package>examples.console.internal > </Private-Package> > > > </instructions> > > > </configuration> > > > </plugin> > > > </plugins> > > > </build> > > > > > > <dependencies> > > > <dependency> > > > <groupId>org.osgi</groupId> > > > <artifactId>osgi_R4_core</artifactId> > > > <version>1.0</version> > > > </dependency> > > > <dependency> > > > <groupId>org.osgi</groupId> > > > <artifactId>osgi_R4_compendium</artifactId> > > > <version>1.0</version> > > > </dependency> > > > <dependency> > > > <groupId>org.eclipse</groupId> > > > <artifactId>osgi</artifactId> > > > <version>3.3.0-v20070530</version> > > > <scope>provided</scope> > > > </dependency> > > > </dependencies> > > > > > > <repositories> > > > <repository> > > > <id>eclipse</id> > > > <url>http://repo1.maven.org/eclipse</url> > > > </repository> > > > </repositories> > > > > > > </project> > > > =================================================================== > > > > > > and this Java class: > > > > > > =================================================================== > > > package examples.console.internal; > > > > > > import org.eclipse.osgi.framework.console.CommandProvider; > > > > > > import org.osgi.framework.BundleActivator; > > > import org.osgi.framework.BundleContext; > > > > > > public class Activator > > > implements BundleActivator > > > { > > > static class MyCommands implements CommandProvider > > > { > > > public String getHelp() > > > { > > > return "don't panic :)"; > > > } > > > } > > > > > > public void start( BundleContext bc ) > > > throws Exception > > > { > > > } > > > > > > public void stop( BundleContext bc ) > > > throws Exception > > > { > > > } > > > } > > > =================================================================== > > > > > > produce the following manifest using "mvn clean install": > > > > > > =================================================================== > > > Manifest-Version: 1.0 > > > Bundle-SymbolicName: examples.console.myConsole > > > Import-Package: org.eclipse.osgi.framework.console;version=1.0,org.osg > > > i.framework;version=1.4 > > > Bundle-Activator: examples.console.internal.Activator > > > Created-By: 1.5.0 (IBM Corporation) > > > Bundle-ManifestVersion: 2 > > > Bundle-Name: myConsole example > > > Bnd-LastModified: 1190176961184 > > > Tool: Bnd-0.0.160 > > > Bundle-Version: 1.0.0.SNAPSHOT > > > Private-Package: examples.console.internal > > > =================================================================== > > > > > > which has org.eclipse.osgi.framework.console;version=1.0 as an import > > > > > > HTH > > > > > > Thanks for any input, > > > > Rodrigo > > > > > > > > On 9/18/07, Rodrigo Madera <[EMAIL PROTECTED]> wrote: > > > > > > > > > > Thanks, I was just putting the scr.component tag. > > > > > > > > > > So for the record, and those using the search facility, the > solution > > was > > > > > to add both scr.component and scr.service to the service > > implementation > > > > > class. > > > > > > > > > > Thank you, > > > > > Rodrigo > > > > > > > > > > On 9/18/07, Felix Meschberger <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > Hi Rodrigo, > > > > > > > > > > > > The interface is not marked. The implementation is marked with > > > > > > @scr.component to indicate to the SCR plugin, that this class > > contains > > > > a > > > > > > component with tags to be converted to a descriptor. In > addition, > > the > > > > > > @scr.service tag would be added to add the <service> element to > > the > > > > > > descriptor. > > > > > > > > > > > > For example: > > > > > > > > > > > > package sample; > > > > > > import iface.MyService > > > > > > /** > > > > > > * @scr.component > > > > > > * @scr.service > > > > > > */ > > > > > > public class MyServiceImpl implements MyService { > > > > > > } > > > > > > > > > > > > This results in the following descriptor: > > > > > > > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > > > <components xmlns:scr=" > > http://www.osgi.org/xmlns/scr/v1.0.0"> > > > > > > <scr:component enabled="true" immediate="true" > > > > > > name="sample.MyServiceImpl"> > > > > > > <scr:implementation class="sample.MyServiceImpl" > > /> > > > > > > <scr:property name="service.pid" > > > > > > value=" sample.MyServiceImpl" /> > > > > > > <scr:service> > > > > > > <provide interface="iface.MyService" /> > > > > > > </scr:service> > > > > > > </scr:component> > > > > > > </components> > > > > > > > > > > > > Hope this helps. > > > > > > > > > > > > You will find more applications of the SCR plugin tags in the > > Sling > > > > Core > > > > > > project at [1] > > > > > > > > > > > > Regards > > > > > > Felix > > > > > > > > > > > > [1] http://svn.apache.org/viewvc/incubator/sling/trunk/core/ > > > > > > > > > > > > > > > > > > Am Dienstag, den 18.09.2007, 06:14 -0300 schrieb Rodrigo Madera: > > > > > > > Hey Bertrand, > > > > > > > > > > > > > > Thanks for the information. I'm already producing code with > the > > > > > > plug-in, but > > > > > > > unfortunately with a misconfiguration somewhere. Could you > > provide a > > > > > > simple > > > > > > > example? > > > > > > > > > > > > > > For example, MyService interface and MyServiceImpl would be > > marked > > > > > > with > > > > > > > scr.service and scr.component respectively, correct? That's > what > > I'm > > > > > > doing > > > > > > > but something is not right. > > > > > > > > > > > > > > Thanks for any insight, > > > > > > > Rodrigo > > > > > > > > > > > > > > On 9/15/07, Bertrand Delacretaz < [EMAIL PROTECTED]> > wrote: > > > > > > > > > > > > > > > > Hi Rodrigo, > > > > > > > > > > > > > > > > On 9/15/07, Rodrigo Madera <[EMAIL PROTECTED]> wrote: > > > > > > > > >... I'm trying to develop a Declarative Service using the > > > > > > > > maven-bundle-plugin, > > > > > > > > > but I can't find documentation on it.... > > > > > > > > > > > > > > > > The docs are at > > > > > > > > http://felix.apache.org/site/maven-bundle-plugin-bnd.html > , but > > > > to > > > > > > > > create Declarative Services you should also have a look at > the > > > > > > > > maven-scr-plugin, see > > > > > > > > http://felix.apache.org/site/maven-scr-plugin.html > > > > > > > > > > > > > > > > -Bertrand > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > > > > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > -- Cheers, Stuart

