This is the first time I've used ANT's manifest task. OSGi requires a manifest of a particular format be added to the jar file. Using the manifest task eliminated the need to create and manage a separate manifest file.
<project name="hello-activator" default="jar" basedir="."> <property name="version" value="1.0.0"/> <property name="buildfile" value="${ant.project.name}-${version}.jar"/> <property name="src" location="src/main/java"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <property name="manifest" location="build/META-INF/MANIFEST.MF"/> <property name="lib.dir" location="../../../lib/spring-osgi-1.1.2/lib"/> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path> <target name="clean"> <delete dir="${build}"/> <delete dir="${dist}"/> </target> <target name="init" depends="clean"> <mkdir dir="${build}"/> <mkdir dir="${build}/META-INF"/> <mkdir dir="${dist}"/> </target> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${build}" classpathref="classpath"/> </target> <target name="jar" depends="compile"> <manifest file="${manifest}" mode="update"> <attribute name="Bundle-ManifestVersion" value="2"/> <attribute name="Bundle-SymbolicName" value="com.pragprog.HelloWorld"/> <attribute name="Bundle-Name" value="HelloWorld"/> <attribute name="Bundle-Version" value="1.0.0"/> <attribute name="Bundle-Activator" value="com.pragprog.hello.HelloWorld"/> <attribute name="Import-Package" value="org.osgi.framework"/> </manifest> <jar jarfile="${dist}/${buildfile}" basedir="${build}" manifest="${manifest}"/> </target> </project>
package com.pragprog.hello; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class HelloWorld implements BundleActivator { public void start(BundleContext ctx) throws Exception { System.out.println("Hello World!"); } public void stop(BundleContext ctx) throws Exception { System.out.println("Goodbye World!"); } }
Equinox presents the osgi> prompt. From this prompt, load the jar file and execute the service.
osgi> install file:dist/hello-activator-1.0.0.jar Bundle id is 1 osgi> ss Framework is launched. id State Bundle 0 ACTIVE system.bundle_3.2.2.R32x_v20070118 1 INSTALLED com.pragprog.HelloWorld_1.0.0 osgi> start 1 Hello World! osgi> stop 1 Goodbye World! osgi>