<?xml version="1.0" encoding="UTF-8"?>
	<!--
		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">

	<modelVersion>4.0.0</modelVersion>

        <groupId>org.apache.aries.tutorials.blueprint</groupId>
	<artifactId>org.apache.aries.tutorials.blueprint.greeter.server.osgi</artifactId>
	<packaging>bundle</packaging>
	<name>Greeter OSGi Server</name>
	<version>0.4-SNAPSHOT</version>

        <description>
        This is the initial greeter service project. Students working through the tutorial
        modify this server to turn it into a blueprint server. It has no parent because it
        is built outside the tutorial. When the tutorial is assembled the source and binaries
        from this project are included the the tutorial zip/tar.gz files.
        The version is referenced in the tutorial documentation (tutorial-assembly/src/main/docs/instructions.html),
        so changes to the version number here must be reflected in the documentation.
        </description>


	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin
                </artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
						<Bundle-Activator>org.apache.aries.tutorials.blueprint.greeter.server.osgi.ServiceRegisteringActivator</Bundle-Activator>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.apache.aries.tutorials.blueprint</groupId>
			<artifactId>org.apache.aries.tutorials.blueprint.greeter.api</artifactId>
			<version>0.4-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi</artifactId>
			<version>3.0.0</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
	</dependencies>
</project>
