<!--
	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>
	<packaging>bundle</packaging>
	<artifactId>org.apache.felix.ipojo.api</artifactId>
	<version>1.3.0-SNAPSHOT</version>
	<name>Apache Felix iPOJO API</name>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>1.4.3</version>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>${pom.artifactId}
						</Bundle-SymbolicName>
						<Import-Package>!org.objectweb.asm.tree, *</Import-Package>
						<Export-Package>org.apache.felix.ipojo.api
						</Export-Package>
						<Private-Package>org.apache.felix.ipojo.manipulation,
							org.apache.felix.ipojo.manipulation.annotations,
							org.objectweb.asm.commons, org.objectweb.asm</Private-Package>
						<Include-Resource> META-INF/LICENCE=LICENSE,
							META-INF/NOTICE=NOTICE, META-INF/LICENSE.asm=LICENSE.asm
						</Include-Resource>
					</instructions>
				</configuration>
			</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>
						<param>.fbprefs</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>
	<dependencies>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo</artifactId>
			<version>1.3.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
			<version>1.3.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>asm</groupId>
			<artifactId>asm-all</artifactId>
			<version>3.0</version>
			<exclusions>
				<exclusion>
					<groupId>asm</groupId>
					<artifactId>asm-tree</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
</project>
