<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! 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 from
 ! 
 !     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>
  <artifactId>asterix-server</artifactId>
  <name>asterix-server</name>
  <parent>
    <groupId>edu.uci.ics.asterix</groupId>
    <artifactId>asterix</artifactId>
    <version>0.8.7-SNAPSHOT</version>
  </parent>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>appassembler-maven-plugin</artifactId>
        <version>1.3</version>
        <configuration>
          <assembleDirectory>
            ${project.build.directory}/appassembler
          </assembleDirectory>
          <repositoryLayout>flat</repositoryLayout>
          <programs>
            <program>
              <platforms>
                <platform>unix</platform>
              </platforms>
              <name>asterixcc</name>
              <mainClass>edu.uci.ics.hyracks.control.cc.CCDriver</mainClass>
              <commandLineArguments>
                 <commandLineArgument>-app-cc-main-class</commandLineArgument>
                 <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint</commandLineArgument>
              </commandLineArguments>
            </program>
            <program>
              <platforms>
                <platform>unix</platform>
              </platforms>
              <name>asterixnc</name>
              <mainClass>edu.uci.ics.hyracks.control.nc.NCDriver</mainClass>
              <commandLineArguments>
                <commandLineArgument>-app-nc-main-class</commandLineArgument>
                <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint</commandLineArgument>
              </commandLineArguments>
            </program>
          </programs>
          <daemons>
            <daemon>
              <id>asterixcc</id>
              <mainClass>edu.uci.ics.hyracks.control.cc.CCDriver</mainClass>
              <platforms>
              	<platform>booter-windows</platform>
              </platforms>
              <commandLineArguments>
                 <commandLineArgument>-app-cc-main-class</commandLineArgument>
                 <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint</commandLineArgument>
              </commandLineArguments>
            </daemon>
            <daemon>
              <id>asterixnc</id>
              <mainClass>edu.uci.ics.hyracks.control.nc.NCDriver</mainClass>
              <platforms>
              	<platform>booter-windows</platform>
              </platforms>
              <commandLineArguments>
                <commandLineArgument>-app-nc-main-class</commandLineArgument>
                <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint</commandLineArgument>
              </commandLineArguments>
            </daemon>
          </daemons>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>assemble</goal>
              <goal>generate-daemons</goal>
              <goal>create-repository</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <executions>
          <execution>
            <configuration>
              <descriptors>
                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
              </descriptors>
            </configuration>
            <phase>package</phase>
            <goals>
              <goal>attached</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  	<dependency>
  		<groupId>edu.uci.ics.hyracks</groupId>
  		<artifactId>hyracks-control-cc</artifactId>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>edu.uci.ics.hyracks</groupId>
  		<artifactId>hyracks-control-nc</artifactId>
  		<type>jar</type>
  		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>edu.uci.ics.asterix</groupId>
  		<artifactId>asterix-app</artifactId>
  		<version>0.8.7-SNAPSHOT</version>
  	</dependency>
  	<dependency>
  		<groupId>org.codehaus.mojo.appassembler</groupId>
  		<artifactId>appassembler-booter</artifactId>
  		<version>1.3.1</version>
  	</dependency>
  </dependencies>
</project>
