<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.http.jetty</module>
	<module>org.apache.felix.scr</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>
