<?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.
-->
<actions>
    <action>
        <actionName>run</actionName>
        <goals>
            <goal>clean</goal>
            <goal>package</goal>
            <goal>antrun:run</goal>
            <goal>-o</goal>
        </goals>
    </action>
    <action>
        <actionName>debug</actionName>
        <goals>
            <goal>clean</goal>
            <goal>package</goal>
            <goal>antrun:run</goal>
            <goal>-o</goal>
        </goals>
        <properties>
            <vm.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}</vm.args>
            <jpda.listen>true</jpda.listen>
        </properties>
    </action>
    <action>
        <actionName>profile</actionName>
        <goals>
            <goal>clean</goal>
            <goal>package</goal>
            <goal>antrun:run</goal>
            <goal>-o</goal>
        </goals>
        <properties>
            <vm.args>${profiler.args}</vm.args>
            <!-- XXX <java jvm="${profiler.java}" ...> -->
            <profiler.action>profile</profiler.action>
        </properties>
    </action>
    <action>
        <actionName>CUSTOM-resume-debug</actionName>
        <displayName>Resume Debug</displayName>
        <goals>
            <goal>antrun:run</goal>
        </goals>
        <properties>
            <vm.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}</vm.args>
            <jpda.listen>true</jpda.listen>
        </properties>
    </action>
</actions>
