<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>ipojo.tests</groupId>
    <artifactId>ipojo.tests</artifactId>
    <version>1.5.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <groupId>org.apache.felix</groupId>
  <artifactId>org.apache.felix.ipojo.online.manipulator.test</artifactId>
  <version>1.7.0-SNAPSHOT</version>
  <name>Online Manipulator Test</name>
  <packaging>jar</packaging>
    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>depends-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
          <execution>
            <id>generate-depends-file</id>
            <goals>
              <goal>generate-depends-file</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
    </dependency>

  <!--
    Pax Exam API:
  -->
  <dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam</artifactId>
    <version>1.2.0</version>
  </dependency>
  <!--
    During runtime Pax Exam will discover the OSGi container to use by
    searching metadata available into classpath. Pax Exam comes with a
    default container that uses [Pax Runner] for implementing the
    container requirements:
  -->
  <dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam-container-default
    </artifactId>
    <version>1.2.0</version>
  </dependency>
  <!--
    If your test code is based on JUnit you will have to have the Junit
    support artifact:
  -->
  <dependency>
    <groupId>org.ops4j.pax.exam</groupId>
    <artifactId>pax-exam-junit</artifactId>
    <version>1.2.0</version>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.5</version>
    <type>jar</type>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>org.ops4j.pax.swissbox</groupId>
    <artifactId>pax-swissbox-tinybundles</artifactId>
    <version>1.2.0</version>
  </dependency>
  <dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.4.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.ipojo.annotations</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.ipojo</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.ipojo.online.manipulator</artifactId>
    <version>1.7.0-SNAPSHOT</version>
  </dependency>

  </dependencies>
</project>
