<!--
	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>org.apache.felix</groupId>
		<artifactId>felix</artifactId>
		<version>1.0.4</version>
		<relativePath>../../pom/pom.xml</relativePath>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<packaging>bundle</packaging>
	<name>Apache Felix iPOJO Composite</name>
	<artifactId>org.apache.felix.ipojo.composite</artifactId>
	<groupId>org.apache.felix</groupId>
	<version>1.3.0-SNAPSHOT</version>
	
	<properties>
		<ipojo.package.version>1.2.0</ipojo.package.version>
	</properties>
	
	<dependencies>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.osgi.core</artifactId>
			<version>1.0.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
			<version>1.3.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo</artifactId>
			<version>1.3.0-SNAPSHOT</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>1.4.3</version>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Bundle-Name>Apache Felix iPOJO Composite</Bundle-Name>
						<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
						<Bundle-Vendor> The Apache Software Foundation </Bundle-Vendor>
						<Bundle-Description> iPOJO Composititon Framework 
						</Bundle-Description>
						<Bundle-DocURL>
							http://felix.apache.org/site/apache-felix-ipojo.html 
						</Bundle-DocURL>
						<Import-Package> 
							org.apache.felix.ipojo,
							org.apache.felix.ipojo.architecture,
							org.apache.felix.ipojo.context, 
							org.apache.felix.ipojo.metadata,
							org.apache.felix.ipojo.parser, 
							org.apache.felix.ipojo.util,
							org.osgi.framework;version=1.3 </Import-Package>
						<Private-Package> 
							org.apache.felix.ipojo.composite.architecture,
							org.apache.felix.ipojo.composite.service*,
							org.apache.felix.ipojo.composite.instance,
							org.apache.felix.ipojo.composite.util
						</Private-Package>
						<Export-Package> 
							org.apache.felix.ipojo.composite; version="${ipojo.package.version}" ,
							!org.objectweb.asm.xml*,
							org.objectweb.asm*;-split-package:=merge-first ,
							org.apache.felix.ipojo.manipulation
						</Export-Package>
						<Include-Resource> META-INF/LICENSE=LICENSE,
							META-INF/NOTICE=NOTICE, META-INF/LICENSE.asm=LICENSE.asm 
						</Include-Resource>
						<IPOJO-Extension>
							composite:org.apache.felix.ipojo.composite.CompositeFactory 
						</IPOJO-Extension>
						<_donotcopy> (CVS|.svn|.+.bak|~.+|metadata.xml) </_donotcopy>
					</instructions>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-ipojo-plugin</artifactId>
				<version>1.3.0-SNAPSHOT</version>
				<executions>
					<execution>
						<goals>
							<goal>ipojo-bundle</goal>
						</goals>
						<configuration>
							<metadata>metadata.xml</metadata>
							<ignoreAnnotations>true</ignoreAnnotations>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>rat-maven-plugin</artifactId>
				<configuration>
					<excludeSubProjects>false</excludeSubProjects>
					<useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
					<useMavenDefaultExcludes>true</useMavenDefaultExcludes>
					<excludes>
						<param>doc/**/*</param>
						<param>maven-eclipse.xml</param>
						<param>.checkstyle</param>
						<param>.externalToolBuilders/*</param>
						<param>LICENSE.asm</param>
					</excludes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-checkstyle-plugin</artifactId>
				<configuration>
					<enableRulesSummary>false</enableRulesSummary>
					<violationSeverity>warning</violationSeverity>
					<configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>