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

    <!--

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

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.felix.karaf</groupId>
        <artifactId>karaf</artifactId>
        <version>1.3.0-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.felix.karaf</groupId>
    <artifactId>itests</artifactId>
    <packaging>jar</packaging>
    <version>1.3.0-SNAPSHOT</version>
    <name>Apache Felix Karaf :: ITests</name>

    <description>
        Integration tests
    </description>

    <properties>
        <appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
    </properties>

    <dependencies>
        <!-- This is required to be first so that pax-exam classloader is not messed up with a newer version of felix
              which would lead to java.lang.NoSuchMethodError: org.apache.felix.framework.Logger.<init>(I)V -->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.framework</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!-- This is required to be first so that pax-exam classloader is not messed up with a newer version of felix
              which would lead to java.lang.RuntimeException: Could not create [service.obr] -->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.bundlerepository</artifactId>
            <version>1.2.1</version>
        </dependency>

        <!-- The assembly and all the dependencies -->
        <dependency>
            <groupId>org.apache.felix.karaf</groupId>
            <artifactId>apache-felix-karaf</artifactId>
            <type>xml</type>
            <classifier>features</classifier>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.felix.karaf.tooling</groupId>
            <artifactId>org.apache.felix.karaf.tooling.testing</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Pax EXAM -->
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-default</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit-extender-impl</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>ops4j.releases</id>
            <url>http://repository.ops4j.org/maven2</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>ops4j.releases</id>
            <url>http://repository.ops4j.org/maven2</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <plugins>
            <!-- generate dependencies versions -->
            <plugin>
                <groupId>org.apache.servicemix.tooling</groupId>
                <artifactId>depends-maven-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <id>generate-depends-file</id>
                        <goals>
                            <goal>generate-depends-file</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>ci-build-profile</id>
            <activation>
                <property>
                   <name>maven.repo.local</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                           <!-- when the local repo location has been specified, we need to pass on this information to PAX mvn url -->
                           <argLine>-Dorg.ops4j.pax.url.mvn.localRepository=${maven.repo.local}</argLine>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <!--
        <profile>
            <activation>
                <os>
                    <family>Windows</family>
                </os>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        -->
    </profiles>

</project>
