<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.felix</groupId>
  <artifactId>felix</artifactId>
  <packaging>pom</packaging>
  <name>Apache Felix (parent)</name>
  <version>0.8.0-SNAPSHOT</version>
  <modules>
    <!-- <module>javax.servlet</module> -->
    <module>tools/maven2/maven-osgi-plugin</module>
    <module>javax.servlet</module>
    <module>org.osgi.core</module>
    <module>org.osgi.compendium</module>
    <module>org.apache.felix.framework</module>
    <module>org.apache.felix.shell</module>
    <module>org.apache.felix.shell.tui</module>
    <module>org.apache.felix.shell.gui</module>
    <module>org.apache.felix.shell.gui.plugin</module>
    <module>org.apache.felix.bundlerepository</module>
    <module>org.apache.felix.daemon</module>
    <module>org.apache.felix.dependencymanager</module>
    <module>org.apache.felix.main</module>
    <module>org.apache.felix.examples.eventlistener</module>
    <module>org.apache.felix.examples.dictionaryservice</module>
    <module>org.apache.felix.examples.frenchdictionary</module>
    <module>org.apache.felix.examples.dictionaryclient</module>
    <module>org.apache.felix.examples.dictionaryclient2</module>
    <module>org.apache.felix.examples.spellcheckservice</module>
    <module>org.apache.felix.examples.spellcheckclient</module>
    <module>org.apache.felix.examples.spellcheckbinder</module>
    <module>org.apache.felix.servicebinder</module>
    <module>org.apache.felix.wireadmin</module>
    <module>org.apache.felix.upnp.extra</module>
    <module>org.apache.felix.upnp.basedriver</module>
    <module>org.apache.felix.upnp.tester</module>      
    <module>org.apache.felix.upnp.sample.tv</module>
    <module>org.apache.felix.upnp.sample.clock</module>
    <module>org.apache.felix.upnp.sample.binaryLight</module>
    <module>org.apache.felix.http.jetty</module>
	<module>org.apache.felix.scr</module>
	<module>org.apache.felix.eventadmin</module>
  </modules>

  <repositories>
    <!-- For snapshots (no release jars or non-apache jars)           -->
    <repository>
      <id>apache.snapshots</id>
      <name>Apache Snapshot Repository</name>
      <url>http://cvs.apache.org/maven-snapshot-repository</url>
    </repository>

    <repository>
      <id>safehaus</id>
      <name>Alternate Repository for Missing Ibiblio Artifacts</name>
      <url>http://m2.safehaus.org</url>
    </repository>
  </repositories>

  <distributionManagement>
    <snapshotRepository>
      <name>Apache Snapshots</name>
      <id>apache.snapshots</id>
      <url>
        scp://apache.org/www/cvs.apache.org/maven-snapshot-repository
      </url>
    </snapshotRepository>
    <repository>
      <name>ASF Mirrored M2 Distributions</name>
      <id>apache.distributions</id>
      <url>
        scp://minotaur.apache.org/www/www.apache.org/dist/maven-repository
      </url>
    </repository>
  </distributionManagement>

  <pluginRepositories>
    <pluginRepository>
      <id>apache.snapshots</id>
      <name>snapshot plugins</name>
      <url>
        http://cvs.apache.org/maven-snapshot-repository
      </url>
    </pluginRepository>
  </pluginRepositories>

</project>
