<!--
  #%L
  SAMOA
  %%
  Copyright (C) 2013 Yahoo! Inc.
  %%
  Licensed 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.
  #L%
  -->
<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>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <name>samoa-threads</name>
    <description>Multithreading local engine for SAMOA</description>

    <artifactId>samoa-threads</artifactId>
    <parent>
        <groupId>com.yahoo.labs.samoa</groupId>
        <artifactId>samoa</artifactId>
        <version>0.3.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.yahoo.labs.samoa</groupId>
            <artifactId>samoa-api</artifactId>
            <version>${project.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.yahoo.labs.samoa</groupId>
            <artifactId>samoa-test</artifactId>
            <type>test-jar</type>
            <classifier>test-jar-with-dependencies</classifier>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j-simple.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- SAMOA assembly -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven-assembly-plugin.version}</version>
                <configuration>
                    <finalName>SAMOA-Threads-${project.version}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <attach>false</attach>
                    <outputDirectory>../target</outputDirectory>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifestEntries>
                            <Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>
                            <Bundle-Description>${project.description}</Bundle-Description>
                            <Implementation-Version>${project.version}</Implementation-Version>
                            <Implementation-Vendor>Yahoo Labs</Implementation-Vendor>
                            <Implementation-Vendor-Id>SAMOA</Implementation-Vendor-Id>
                        </manifestEntries>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <argLine>-Xmx1G</argLine>
                    <redirectTestOutputToFile>false</redirectTestOutputToFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
