<!--
 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>


  <properties>
    <ipojo.core.release>1.8.0</ipojo.core.release>
    <ipojo.core.snapshot>1.9.0-SNAPSHOT</ipojo.core.snapshot>

    <ipojo.api.release>1.6.0</ipojo.api.release>
    <ipojo.api.snapshot>1.7.0-SNAPSHOT</ipojo.api.snapshot>

    <ipojo.composite.release>1.6.0</ipojo.composite.release>
    <ipojo.composite.snapshot>1.9.0-SNAPSHOT</ipojo.composite.snapshot>

    <ipojo.eah.release>1.6.0</ipojo.eah.release>
    <ipojo.eah.snapshot>1.9.0-SNAPSHOT</ipojo.eah.snapshot>
    <ipojo.temporal.snapshot>1.7.0-SNAPSHOT</ipojo.temporal.snapshot>
    <ipojo.wbp.snapshot>1.6.1-SNAPSHOT</ipojo.wbp.snapshot>
  </properties>

  <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>${ipojo.core.release}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.annotations</artifactId>
            <version>${ipojo.core.release}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.api</artifactId>
            <version>${ipojo.api.release}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.composite</artifactId>
            <version>${ipojo.composite.release}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
            <version>${ipojo.core.release}</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.9.0-SNAPSHOT</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>
