<!--
  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.hivemall</groupId>
		<artifactId>hivemall</artifactId>
		<version>0.5.1-incubating-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>

	<artifactId>hivemall-all</artifactId>
	<name>Hivemall Distribution</name>
	<packaging>jar</packaging>

	<properties>
		<main.basedir>${project.parent.basedir}</main.basedir>
	</properties>

	<dependencies>
		<!-- compile scope -->
		<dependency>
			<groupId>org.apache.hivemall</groupId>
			<artifactId>hivemall-core</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hivemall</groupId>
			<artifactId>hivemall-nlp</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hivemall</groupId>
			<artifactId>hivemall-xgboost</artifactId>
			<version>${project.version}</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-jar-plugin</artifactId>
                <configuration>
					<finalName>${project.artifactId}-${project.version}</finalName>
                    <archive>
                        <index>true</index>
                        <compress>true</compress>
                        <manifest>
                            <addClasspath>false</addClasspath>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        </manifest>
                    </archive>
                </configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<executions>
					<execution>
						<id>jar-with-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<finalName>${project.artifactId}-${project.version}</finalName>
							<outputDirectory>${project.parent.build.directory}</outputDirectory>
							<minimizeJar>false</minimizeJar>
							<createDependencyReducedPom>false</createDependencyReducedPom>
							<createSourcesJar>true</createSourcesJar>
							<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
							<artifactSet>
								<includes>
									<!-- hivemall-core -->
									<include>org.apache.hivemall:hivemall-core</include>
									<include>io.netty:netty-all</include>
									<include>com.github.haifengl:smile-core</include>
									<include>com.github.haifengl:smile-math</include>
									<include>com.github.haifengl:smile-data</include>
									<include>org.tukaani:xz</include>
									<include>org.apache.commons:commons-math3</include>
									<include>org.roaringbitmap:RoaringBitmap</include>
									<include>it.unimi.dsi:fastutil</include>
									<include>com.clearspring.analytics:stream</include>
									<!-- hivemall-nlp -->
									<include>org.apache.hivemall:hivemall-nlp</include>
									<include>org.apache.lucene:lucene-analyzers-kuromoji</include>
									<include>org.apache.lucene:lucene-analyzers-smartcn</include>
									<include>org.apache.lucene:lucene-analyzers-common</include>
									<include>org.apache.lucene:lucene-core</include>
									<!-- hivemall-xgboost -->
									<include>org.apache.hivemall:hivemall-xgboost</include>
									<include>io.github.myui:xgboost4j</include>
									<include>com.esotericsoftware.kryo:kryo</include>
								</includes>
								<excludes>
									<exclude>org.apache.hivemall:hivemall-all</exclude>
								</excludes>
							</artifactSet>
							<transformers>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<manifestEntries>
										<Implementation-Title>${project.name}</Implementation-Title>
										<Implementation-Version>${project.version}</Implementation-Version>
										<Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
									</manifestEntries>
								</transformer>
							</transformers>
							<filters>
								<filter>
									<artifact>org.apache.lucene:*</artifact>
									<includes>
										<include>**</include>
									</includes>
								</filter>
								<filter>
									<artifact>com.esotericsoftware.kryo:kryo</artifact>
									<includes>
										<include>**</include>
									</includes>
								</filter>
								<filter>
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/LICENSE.txt</exclude>
										<exclude>META-INF/NOTICE.txt</exclude>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
										<exclude>*.jar</exclude>
										<exclude>tracker.py</exclude>
									</excludes>
								</filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>