<!-- 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>gogo-parent</artifactId>
		<version>4</version>
		<relativePath>../gogo-parent/pom.xml</relativePath>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<packaging>bundle</packaging>
	<name>Apache Felix Gogo Shell</name>
	<artifactId>org.apache.felix.gogo.shell</artifactId>
	<version>1.1.0</version>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.gogo.shell-1.1.0</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.gogo.shell-1.1.0</developerConnection>
        <url>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.gogo.shell-1.1.0</url>
    </scm>
	<dependencies>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>osgi.core</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>osgi.cmpn</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.gogo.runtime</artifactId>
			<version>1.1.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Export-Package>
						</Export-Package>
						<Import-Package>
							org.apache.felix.service.command,
							*
						</Import-Package>
						<Private-Package>
							org.apache.felix.gogo.shell,
							org.apache.felix.gogo.options
						</Private-Package>
						<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
						<Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
						<Bundle-Activator>org.apache.felix.gogo.shell.Activator</Bundle-Activator>
						<Include-Resource>{maven-resources},META-INF/LICENSE=LICENSE,META-INF/NOTICE=NOTICE,META-INF/DEPENDENCIES=DEPENDENCIES</Include-Resource>
						<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
						<_removeheaders>Private-Package,Ignore-Package,Include-Resource</_removeheaders>
					</instructions>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.rat</groupId>
				<artifactId>apache-rat-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>src/main/resources/gosh_profile</param>
						<param>src/main/resources/motd</param>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
