<?xml version="1.0" encoding="UTF-8"?>
<!--
 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>
    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>1.2.0</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>

    <artifactId>org.apache.felix.configadmin</artifactId>
    <version>1.2.9-SNAPSHOT</version>
    <packaging>bundle</packaging>

    <name>Apache Felix Configuration Admin Service</name>
    <description>
        Implementation of the OSGi Configuration Admin Service Specification 1.2
    </description>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/configadmin</connection>
        <developerConnection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/configadmin</developerConnection>
        <url>http://svn.apache.org/repos/asf/felix/configadmin</url>
    </scm>

    <!--
        A Note on Testing
        =================
        
        This project contains two kinds of tests: regular unit tests running
        in the test phase and integration tests based on PAX Exam running
        in the integration-test phase.
        
        Basically the complete project is build using Java 1.3 source and target
        compatibility (as inherited from the parent pom). The exception are the
        unit tests in the "integration" packages. These have to be compiled with
        Java 5 source and target compatibility because the employ annotations
        and generics.
        
        For running the integration tests from the console using Maven nothing
        special has to be done as the tests run automatically. To run the tests
        in your IDE, the project has to be built to the "package" phase with
        the profile "ide" enabled:
        
             $ mvn -Pide clean package
             
        This creates the scr.jar file in the target folder, which is used by
        the integration tests when run from the IDE. Alternatively the
        "project.bundle.file" system property may be set to the bundle JAR
        in the IDE launcher. 
    -->
    <properties>
        <bundle.build.name>
            ${basedir}/target
        </bundle.build.name>
        <bundle.file.name>
            ${bundle.build.name}/${project.build.finalName}.jar
        </bundle.file.name>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>4.2.0</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- Integration Testing with Pax Exam -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam</artifactId>
            <version>0.6.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-junit</artifactId>
            <version>0.6.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.exam</groupId>
            <artifactId>pax-exam-container-default</artifactId>
            <version>0.6.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.swissbox</groupId>
            <artifactId>pax-swissbox-tinybundles</artifactId>
            <version>1.0.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.0.1</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-Category>osgi</Bundle-Category>
                        <Bundle-SymbolicName>
                            ${artifactId}
                        </Bundle-SymbolicName>
                        <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
                        <Bundle-DocURL>
                            http://felix.apache.org/site/apache-felix-config-admin.html
                        </Bundle-DocURL>
                        <Bundle-Activator>
                            org.apache.felix.cm.impl.ConfigurationManager
                        </Bundle-Activator>
                        <Export-Package>
                            org.apache.felix.cm;
                            org.apache.felix.cm.file;version=1.0,
                            org.osgi.service.cm
                        </Export-Package>
                        <Private-Package>
                            org.apache.felix.cm.impl,
                            org.osgi.util.tracker
                        </Private-Package>
                        <Import-Package>
                            org.apache.felix.cm;
                            org.apache.felix.cm.file;version="[$(version;==;$(@)),$(version;=+;$(@)))",
                            org.osgi.service.cm;version="[$(version;==;$(@)),$(version;=+;$(@)))",
                            *
                        </Import-Package>
                        <DynamicImport-Package>
                            org.osgi.service.log;version="1.3"
                        </DynamicImport-Package>
                    </instructions>
                </configuration>
            </plugin>
            <!--
                configure default compilation for Java 1.3 and integration
                test compilation for Java 5 (since integration tests use
                Java Annotations for Pax Exam)
            -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <id>test-compile-java5</id>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <source>1.5</source>
                            <target>1.5</target>
                            <testExcludes>
                                <testExclude>**/cm/*</testExclude>
                                <testExclude>**/cm/file/*</testExclude>
                                <testExclude>**/cm/impl/**</testExclude>
                            </testExcludes>
                            <testIncludes>
                                <testInclude>**/integration/**</testInclude>
                            </testIncludes>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <testExcludes>
                        <testExclude>**/integration/**</testExclude>
                    </testExcludes>
                </configuration>
            </plugin>

            <!--
                Exclude Integration tests in (default) unit tests and
                conversely enable integration tests for integration testing
                only. Helper classes are completely excluded from testing. 
            -->
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <id>surefire-it</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <systemProperties>
                                <property>
                                    <name>project.bundle.file</name>
                                    <value>${bundle.file.name}</value>
                                </property>
                            </systemProperties>
                            <excludes>
                                <exclude>**/cm/*</exclude>
                                <exclude>**/cm/file/*</exclude>
                                <exclude>**/cm/impl/**</exclude>
                            </excludes>
                            <includes>
                                <include>**/integration/*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>**/integration/**</exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <profiles>
        <!--
            copy the package such that IDEs may easily use it without
            setting the system property
        -->
        <profile>
            <id>ide</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.3</version>
                        <executions>
                            <execution>
                                <id>cm-file-create</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <copy file="${project.build.directory}/${project.build.finalName}.jar" tofile="${project.build.directory}/configadmin.jar" />
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    
    <!-- repositories for Pax Exam and BND tool -->
    <repositories>
        <repository>
            <id>ops4j</id>
            <name>ops4j</name>
            <url>http://repository.ops4j.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>aqute</id>
            <name>aqute</name>
            <url>http://www.aqute.biz/repo</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
