You can write an ABL WebApp Package task to package an ABL Web App project as a .WAR file to publish it as a new and complete Web App or as a .ZIP file to publish the Web App incrementally to a PAS for OpenEdge instance.

Note: To package an ABL WebApp ANT project, the following pathelement location attributes have been added to the existing build.xml.
<pathelement location="${dlc.java.dir}/ext/commons-logging-1.3.5.jar"/>
<pathelement location="${dlc.java.dir}/ext/xmlschema-core-2.3.1.jar"/

Task-level properties and elements:

Name Description
srcdir Specifies the location of the project for which the .WAR or .ZIP file is to be generated.
dlc

Specifies the location of your OpenEdge installation.

verbose (Optional) Enables the verbose mode. The valid values are true, false, on, off, yes, and no.
Note: By default, the value is set to false.
services (Optional) Specifies the names of the services in the project.
Note: If there are multiple services, separate the names with a comma.
isIncremental (Optional) Specifies whether to generate a .ZIP file for deploying the app incrementally or a .WAR file for deploying the app at once. The valid values are true, false, on, off, yes, and no.
Note: By default, the value is set to false and a .WAR file is generated for full deployment.
webAppName (Optional) Specifies a name for the generated .WAR or .ZIP file.
Note: By default, the name of the project is assigned to the .WAR or .ZIP file.
destdir (Optional) Specifies the destination directory where the .ZIP file is generated.

Here is a sample build.xml file for packaging an ABL WebApp project:

<?xml version="1.0" encoding="UTF-8"?>
<project name="ABLWebApp" default="main" basedir=".">
	
	<property name="dlc.dir" value="$DLC"/>
	<property name="dlc.java.dir" value="${dlc.dir}/java"/>
	<property name="src.dir" value="$srcdir/WebAppPrjRest"/>
	<property name="dest.dir" value="$destdir/WebAppPrjRest"/>
        <property name="app.name" value="$ProjectName" />
    
    <!-- Target for defining 'taskdef' -->
    <target name="taskdef">
    	<echo>Task Definitions</echo>
    	
        <taskdef resource="com/progress/openedge/pdt/ant/ablwebapp/ablwebapps.properties">
            <classpath>
            	<pathelement location="${dlc.java.dir}/ant-ablwebapp.jar"/>
				
				<!-- ABLWebApp Dependencies -->
            	<pathelement location="${dlc.java.dir}/ant-libs/ablwebapp.jar"/>
            	<pathelement location="${dlc.java.dir}/ant-libs/ablwebapp-dependencies.jar"/>
            	
            	<!-- CodeModel Dependencies -->
            	<pathelement location="${dlc.java.dir}/ant-libs/codemodel-dependencies.jar"/>
            	
            	<!-- AST and its Dependencies -->
            	<pathelement location="${dlc.java.dir}/ant-libs/ast.jar"/>
            	<pathelement location="${dlc.java.dir}/ant-libs/ast-dependencies.jar"/>
            	
            	<!-- Additional deps -->
		<pathelement location="${dlc.java.dir}/ant-libs/commons-lang3-3.18.0.jar" />
		<pathelement location="${dlc.java.dir}/ant-libs/slf4j-api.jar" />
		<pathelement location="${dlc.java.dir}/ant-libs/velocity-engine-core-2.4.1.jar" />
		<pathelement location="${dlc.java.dir}/ant-libs/1padapters-restExpose.jar" />
		<pathelement location="${dlc.java.dir}/1padapters-idl.jar" />
		<pathelement location="${dlc.java.dir}/1padapters-util.jar" />
		<pathelement location="${dlc.java.dir}/ext/jettison-1.5.4.jar" />
		<pathelement location="${dlc.java.dir}/ext/commons-logging-1.3.5.jar" />
		<pathelement location="${dlc.java.dir}/ext/xmlschema-core-2.3.1.jar" />             	
        	</classpath>
        </taskdef>
    </target>

	<!-- Main task -->
	<target name="main" depends="taskdef">
		<ABLWebAppPackage srcdir="${src.dir}" dlc="${dlc.dir}" verbose="false" 
			isIncremental="false" webAppName="${app.name}" destdir="${dest.dir}" />
	</target>
	
</project>