<!--
  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">
	<parent>
		<groupId>ipojo.tests</groupId>
		<artifactId>ipojo.tests</artifactId>
		<version>1.5.0-SNAPSHOT</version>
	</parent>

  <modelVersion>4.0.0</modelVersion>
  <packaging>bundle</packaging>
  <name>iPOJO Configuration Management Test Suite</name>
  <artifactId>tests.core.configuration</artifactId>
  <groupId>ipojo.tests</groupId>
  <version>1.5.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo</artifactId>
      <version>1.7.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.metadata</artifactId>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
    </dependency>
    <dependency>
		<groupId>org.osgi</groupId>
		<artifactId>org.osgi.compendium</artifactId>
		<version>4.0.0</version>
	</dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.felix</groupId>
      <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
      <version>1.1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Export-Package>
              org.apache.felix.ipojo.test.scenarios.configuration.service
            </Export-Package>
            <Bundle-SymbolicName>
              ${project.artifactId}
            </Bundle-SymbolicName>
            <Private-Package>
              org.apache.felix.ipojo.test*
            </Private-Package>
            <Test-Suite>
              org.apache.felix.ipojo.test.scenarios.configuration.ConfigurationTestSuite
            </Test-Suite>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-ipojo-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>ipojo-bundle</goal>
            </goals>
            <configuration>
              <ignoreAnnotations>true</ignoreAnnotations>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.4</source>
          <target>1.4</target>
        </configuration>
      </plugin>
      <!-- Test -->
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-junit4osgi-plugin
        </artifactId>
        <version>1.1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <goals>
              <goal>test</goal>
            </goals>
            <configuration>
              <configuration>
              <org.osgi.http.port>8083</org.osgi.http.port>
              </configuration>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
