<!--
 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>
  <parent>
    <groupId>org.apache.felix</groupId>
    <artifactId>felix</artifactId>
    <version>1.0.2</version>
    <relativePath>../pom/pom.xml</relativePath>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>iPOJO</artifactId>
  <groupId>org.apache.felix</groupId>
  <name>Apache Felix iPOJO</name>
  <version>0.7.6-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  	<modules>
		<module>metadata</module>
		<module>manipulator</module>
		<module>plugin</module>
		<module>core</module>
		<module>composite</module>
		<module>arch</module>
		<module>ant</module>
		<module>event.admin.handler</module>
		<module>white.board.pattern.handler</module>
		<module>extender.pattern.handler</module>
	</modules>
	
  <profiles>
	<profile>
		<id>java5</id>
		<activation>
			<jdk>1.5</jdk>
		</activation>
		<modules>
			<module>annotations</module>
			<module>jmx.handler</module>
		</modules>
	</profile>
	<profile>
		<id>java6</id>
		<activation>
			<jdk>1.6</jdk>
		</activation>
		<modules>
			<module>annotations</module>
			<module>jmx.handler</module>
		</modules>
	</profile>
	<profile>
		<id>examples</id>
		<modules>
			<module>examples</module>
		</modules>
	</profile>
	<profile>
		<id>tests</id>
		<modules>
			<module>tests</module>
		</modules>
	</profile>
  </profiles>
</project>
