<?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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.blur</groupId>
		<artifactId>blur</artifactId>
		<version>0.3.0.incubating</version>
		<relativePath>../pom.xml</relativePath>
	</parent>

	<artifactId>distribution-src</artifactId>
	<version>${projectVersion}</version>
	<packaging>pom</packaging>
	<name>Distribution Src</name>
	<description>The Blur distribution-src module builds the source artifact.</description>

	<dependencies>
		<dependency>
			<groupId>org.apache.blur</groupId>
			<artifactId>blur-mapred</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.blur</groupId>
			<artifactId>blur-shell</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.blur</groupId>
			<artifactId>blur-command</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.blur</groupId>
			<artifactId>blur-console</artifactId>
			<version>${project.version}</version>
			<classifier>webapp</classifier>
		</dependency>
	</dependencies>

	<build>
		<plugins>
				<plugin>
					<artifactId>maven-assembly-plugin</artifactId>
					<executions>
						<execution>
							<id>distro-assembly-src</id>
							<phase>package</phase>
							<goals>
								<goal>single</goal>
							</goals>
							<configuration>
								<finalName>apache-blur-${project.parent.version}</finalName>
								<descriptors>
									<descriptor>src/assemble/src.xml</descriptor>
								</descriptors>
							</configuration>
						</execution>
					</executions>
				</plugin>
		</plugins>
	</build>
</project>
