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

        <repository>
            <id>apache.snapshots</id>
            <name>snapshot plugins</name>
            <url>http://repository.apache.org/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>apache.plugins.snapshots</id>
            <name>snapshot plugins</name>
            <url>http://repository.apache.org/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

    <properties>
        <ipojo.core.release>1.8.2</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.8.2</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>

        <ipojo.manipulator.release>1.8.6</ipojo.manipulator.release>
        <ipojo.manipulator.snapshot>1.9.0-SNAPSHOT</ipojo.manipulator.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.snapshot}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.ipojo.annotations</artifactId>
                <version>${ipojo.core.snapshot}</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.snapshot}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
                <version>${ipojo.manipulator.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>${ipojo.manipulator.snapshot}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>2.0.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <target>1.5</target>
                    <source>1.5</source>
                </configuration>
            </plugin>
        </plugins>
    </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>
