<project>

  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>0.8.0-SNAPSHOT</version>
  </parent>
  
  <modelVersion>4.0.0</modelVersion>
  <packaging>osgi-bundle</packaging>
  <name>Apache Felix MOSGi JMX Console GUI component</name>
  <artifactId>org.apache.felix.mosgi.console.component</artifactId>
  <version>0.9.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.osgi.core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.apache.felix.mosgi.console.ifc</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix.plugins</groupId>
        <artifactId>maven-osgi-plugin</artifactId>
        <!--version>${felix.version}</version-->
        <extensions>true</extensions>
        <configuration>
          <osgiManifest>
	    <!--bundleManifestVersion>2</bundleManifestVersion-->
	    <!--bundleClassPath></bundleClassPath-->
            <bundleName>MOSGi JMX Console main GUI component</bundleName>
	    <!--bundleVersion>
	      Default value is {pom.version}.
	      For exemple : 0.9.3-SNAPSHOT -> Bundle-Version=0.9.3.SNAPSHOT
	      But if we specify a ${*} value with extension "-SNAPSHOT" or a value with char '-'
	      it will be misunderstood
	    </bundleVersion-->
            <bundleDescription>MOSGi JMX Console main GUI component</bundleDescription>
	    <!--bundleVendor>Stephane FRENOT</bundleVendor-->
	    <!--bundleDate></bundleDate-->
	    <!--bundleUpdateLocation>
	      This value doesn't resolve "null" messages (when we update a bundle)...
	    <bundleUpdateLocation-->
	    <bundleActivator>auto-detect</bundleActivator>
            <bundleDocUrl>http://oscar-osgi.sf.net/obr2/${pom.artifactId}/</bundleDocUrl>
            <bundleUrl>http://oscar-osgi.sf.net/obr2/${pom.artifactId}/${pom.artifactId}-${pom.version}.jar</bundleUrl>
            <bundleSource>http://oscar-osgi.sf.net/obr2/${pom.artifactId}/${pom.artifactId}-${pom.version}-src.jar</bundleSource>
	    <!--bundleCategory></bundleCategory-->
            <bundleSymbolicName>${pom.artifactId}</bundleSymbolicName>
	    <!--exportPackage></exportPackage-->
	    <importPackage>
	      org.apache.felix.mosgi.console.ifc;specification-version="1.0.0",
	      javax.management;specification-version="1.0.0",
	      javax.swing;specification-version="1.0.0",
	      javax.swing.table;specification-version="1.0.0",
	      org.osgi.framework;specification-version="1.0.0",
	      javax.swing.tree;specification-version="1.0.0"
	    </importPackage>
	    <!--dynamicImportPackage></dynamicImportPackage-->
	    <!--metadataLocation></metadataLocation-->
	    <!--bundleCopyright></bundleCopyright-->
	    <!--bundleNativeCode></bundleNativeCode-->
	    <!--bundleContactAdress></bundleContactAdress-->
	    <!--bundleRequiredExecutionEnvironment></bundleRequiredExecutionEnvironment-->
	    <!--bundleLocalization></bundleLocalization-->
	    <!--requireBundle></requireBundle-->
	    <!--fragmentHost></fragmentHost-->
	    <!--serviceComponent></serviceComponent-->
          </osgiManifest>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
