<!--
	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>
	<modelVersion>4.0.0</modelVersion>
	<packaging>bundle</packaging><!-- Use the BND Maven plug-in -->
	<groupId>ipojo.examples</groupId>
	<artifactId>hello.client</artifactId>
	<version>0.9.0-SNAPSHOT</version>
	<name>Hello Service Client</name>
	<dependencies>
		<dependency>
			<groupId>ipojo.examples</groupId>
			<artifactId>hello.service</artifactId>
			<version>0.9.0-SNAPSHOT</version>
		</dependency>
	</dependencies>

	<pluginRepositories>
		<pluginRepository>
			<id>apache.snapshots</id>
			<name>snapshot plugins</name>
			<url>
				http://people.apache.org/repo/m2-snapshot-repository
			</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<version>1.4.2</version>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>
							${pom.artifactId}
						</Bundle-SymbolicName>
						<Private-Package>
							ipojo.example.hello.client
						</Private-Package>
					</instructions>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-ipojo-plugin</artifactId>
				<version>0.9.0-SNAPSHOT</version>
				<executions>
					<execution>
						<goals>
							<goal>ipojo-bundle</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>
