<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ipojo.tests</groupId>
  <artifactId>ipojo.tests</artifactId>
  <version>1.5.0-SNAPSHOT</version>
  <name>Apache Felix iPOJO Tests</name>
  <packaging>pom</packaging>

  <repositories>
      <repository>
          <releases>
              <enabled>false</enabled>
          </releases>
          <id>ow2.snapshots</id>
          <name>OW2 Snapshot Repository</name>
          <url>http://maven.ow2.org/maven2-snapshot/</url>
      </repository>
  </repositories>

  <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.annotations</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.api</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.composite</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
              <groupId>org.apache.felix</groupId>
              <artifactId>org.apache.felix.ipojo.metadata</artifactId>
              <version>1.4.0</version>
           </dependency>

        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>tinybundles-ipojo</artifactId>
            <version>0.2.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ow2.chameleon.testing</groupId>
            <artifactId>osgi-helpers</artifactId>
            <version>0.2.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
  </dependencyManagement>

  <modules>
  <module>manipulator/manipulation</module>
  <module>manipulator/metadata</module>
  <module>manipulator/primitives</module>
  <module>manipulator/creation</module>
  <module>core/factories</module>
  <module>core/lifecycle-controller</module>
  <module>core/service-providing</module>
  <module>core/lifecycle-callback</module>
  <module>core/service-dependency</module>
  <module>core/service-dependency-bindingpolicy</module>
  <module>core/service-dependency-filter</module>
  <module>core/service-dependency-comparator</module>
  <module>core/service-providing-strategies</module>
  <module>core/service-providing-inheritance</module>
  <module>core/service-dependency-optional</module>
  <module>core/configuration</module>
  <module>core/handler</module>
  <module>core/external-handlers</module>
  <module>core/bad-configurations</module>
  <module>core/logger</module>
  <module>core/factory-version</module>
  <module>composite/composite-runtime</module>
  <module>composite/import-export</module>
  <module>composite/service-instance</module>
  <module>composite/service-providing</module>
  <module>handler/temporal</module>
  <module>handler/whiteboard</module>
  <module>handler/eventadmin</module>
  <module>core/configadmin</module>
  <module>api</module>
  <module>online-manipulator</module>
  </modules>

  <build>
      <pluginManagement>
          <plugins>
              <plugin>
                  <groupId>org.apache.felix</groupId>
                  <artifactId>maven-ipojo-plugin</artifactId>
                  <version>1.6.0</version>
              </plugin>
              <plugin>
                  <groupId>org.apache.felix</groupId>
                  <artifactId>maven-bundle-plugin</artifactId>
                  <version>2.0.1</version>
              </plugin>
          </plugins>
      </pluginManagement>
  </build>
  <profiles>
    <profile>
      <id>java5</id>
      <activation>
        <jdk>1.5</jdk>
      </activation>
      <modules>
        <module>core/annotations</module>
        <module>manipulator/manipulator-java5</module>
        <module>handler/jmx</module>
        <module>handler/transaction</module>
      </modules>
    </profile>
    <profile>
      <id>java6</id>
      <activation>
        <jdk>1.6</jdk>
      </activation>
      <modules>
        <module>core/annotations</module>
        <module>manipulator/manipulator-java5</module>
        <module>handler/jmx</module>
        <module>handler/transaction</module>
      </modules>
    </profile>

    <profile>
      <id>integration-tests</id>
      <modules>
        <module>integration-tests</module>
      </modules>
    </profile>
  </profiles>

</project>
