<!--
 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>
  </repositories>

  <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>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.annotations</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.api</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.composite</artifactId>
			<version>1.6.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
			<version>1.6.0</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.0.1-SNAPSHOT</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>1.6.0</version>
  			</plugin>
  			<plugin>
  				<groupId>org.apache.felix</groupId>
  				<artifactId>maven-bundle-plugin</artifactId>
  				<version>2.0.1</version>
  			</plugin>
  		</plugins>
  	</pluginManagement>
  </build>
  <profiles>
    <profile>
      <id>java5</id>
      <activation>
        <jdk>1.5</jdk>
      </activation>
      <modules>
        <module>bundleAsiPOJO</module>
        <module>core/annotations</module>
        <module>manipulator/manipulator-java5
        </module>
        <module>handler/transaction</module>
      </modules>
    </profile>
    <profile>
      <id>java6</id>
      <activation>
        <jdk>1.6</jdk>
      </activation>
      <modules>
        <module>bundleAsiPOJO</module>
        <module>core/annotations</module>
        <module>manipulator/manipulator-java5
        </module>
        <module>handler/transaction</module>
      </modules>
    </profile>

    <profile>
      <id>integration-tests</id>
      <modules>
        <module>integration-tests</module>
      </modules>
    </profile>
  </profiles>

</project>
