<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>
    <module>org.apache.felix.eventadmin.bridge.upnp</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>
