<project>

  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>0.8.0-SNAPSHOT</version>
  </parent>
  
  <properties>
    <felix.version>0.8.0-SNAPSHOT</felix.version>
    <!--
      Use a property to set felix version. 
      Properties can be set once on the top-level POM
    -->
    <mosgi.console.ifc.version>0.9.0-SNAPSHOT</mosgi.console.ifc.version>
  </properties>

  <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>
      <version>${felix.version}</version>
      <!-- A default value of version can be set on the top-level POM in a dependencyManagement section :
        <dependencyManagement>
	  <dependencies>
	    <dependency>
	      <groupId>${pom.groupId}</groupId>
	      <artifactId>org.osgi.core</artifactId>
	      <version>${pom.version}</version>
	    </dependency>
	    [...]
	  </dependencies>
	</dependencyManagement-->
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${pom.groupId}</groupId>
      <artifactId>org.apache.felix.mosgi.console.ifc</artifactId>
      <version>${mosgi.console.ifc.version}</version>
      <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>
