<!--
	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-parent</artifactId>
		<version>1.2.0</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.4.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>${pom.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo</artifactId>
			<version>${pom.version}</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>${pom.version}</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>