<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>continuum-buildagent</artifactId>
    <groupId>org.apache.continuum</groupId>
    <version>1.4.2</version>
  </parent>
  <artifactId>continuum-buildagent-jetty</artifactId>
  <packaging>pom</packaging>
  <name>Apache Continuum Build Agent</name>
  <dependencies>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.continuum</groupId>
      <artifactId>continuum-buildagent-webapp</artifactId>
      <type>war</type>
    </dependency>
    <!-- Runtime dependencies that need to be included in the generated binaries -->
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-start</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-deploy</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-jndi</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-jsp</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>appassembler-maven-plugin</artifactId>
        <configuration>
          <daemons>
            <daemon>
              <id>continuum-buildagent</id>
              <mainClass>org.eclipse.jetty.start.Main</mainClass>
              <commandLineArguments>
                <commandLineArgument>conf/jetty.xml</commandLineArgument>
                <commandLineArgument>conf/jetty-deploy.xml</commandLineArgument>
                <commandLineArgument>conf/jetty-contexts.xml</commandLineArgument>
                <commandLineArgument>conf/jetty-requestlog.xml</commandLineArgument>
              </commandLineArguments>
              <platforms>
                <platform>jsw</platform>
              </platforms>
              <generatorConfigurations>
                <generatorConfiguration>
                  <generator>jsw</generator>
                  <configuration>
                    <property>
                      <name>wrapper.console.loglevel</name>
                      <value>INFO</value>
                    </property>
                    <property>
                      <name>wrapper.java.additional.1.stripquotes</name>
                      <value>TRUE</value>
                    </property>
                    <property>
                      <name>set.default.REPO_DIR</name>
                      <value>lib</value>
                    </property>
                    <property>
                      <name>wrapper.logfile</name>
                      <value>%CONTINUUM_BUILDAGENT_BASE%/logs/wrapper.log</value>
                    </property>
                    <property>
                      <name>app.base.envvar</name>
                      <value>CONTINUUM_BUILDAGENT_BASE</value>
                    </property>
                    <property>
                      <name>wrapper.on_exit.default</name>
                      <value>RESTART</value>
                    </property>
                    <property>
                      <name>wrapper.on_exit.0</name>
                      <value>SHUTDOWN</value>
                    </property>
                    <property>
                      <name>wrapper.restart.delay</name>
                      <value>30</value>
                    </property>
                  </configuration>
                  <includes>
                    <include>linux-x86-32</include>
                    <include>linux-x86-64</include>
                    <include>macosx-x86-universal-32</include>
                    <include>solaris-x86-32</include>
                    <include>solaris-sparc-32</include>
                    <include>solaris-sparc-64</include>
                    <include>windows-x86-32</include>
                  </includes>
                </generatorConfiguration>
              </generatorConfigurations>
              <jvmSettings>
                <systemProperties>
                  <systemProperty>appserver.home=.</systemProperty>
                  <systemProperty>appserver.base=%CONTINUUM_BUILDAGENT_BASE%</systemProperty>
                  <systemProperty>jetty.logs=%CONTINUUM_BUILDAGENT_BASE%/logs</systemProperty>
                  <systemProperty>java.io.tmpdir=%CONTINUUM_BUILDAGENT_BASE%/tmp</systemProperty>
                </systemProperties>
              </jvmSettings>
            </daemon>
          </daemons>
          <repoPath>lib</repoPath>
          <repositoryLayout>flat</repositoryLayout>
          <assembleDirectory>target/generated-resources/appassembler/jsw/continuum-buildagent</assembleDirectory>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>generate-daemons</goal>
              <goal>create-repository</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptor>src/main/assembly/bin.xml</descriptor>
          <finalName>apache-continuum-buildagent-${version}</finalName>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>config</id>
            <phase>process-resources</phase>
            <configuration>
              <tasks>
                <copy todir="target/generated-resources/appassembler/jsw/continuum-buildagent/conf">
                  <fileset dir="src/main/conf" />
                </copy>
                <mkdir dir="target/generated-resources/appassembler/jsw/continuum-buildagent/logs" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>src/main/conf/webdefault.xml</exclude>
            </excludes>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
