Here is a complete Ant build script that you can use with OpenLaszlo 5.0 (not tested with older versions).
<?xml version="1.0" encoding="UTF-8"?> <project name="olApp" default="build" basedir="."> <description>Ant Build Script for OpenLaszlo DHTML App</description> <property name="app.file" value="testapp.lzx" /> <property name="lps.home" value="PLEASE SET YOUR LPS_HOME FOLDER HERE!!!" /> <property name="build.timestamp" value="will be the set through script below" /> <script language="javascript"> var date = new Date(); var stamp = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss").format(date); olApp.setProperty("build.timestamp", stamp); </script> <property name="project.folder" value="will be set through the script below" /> <script language="javascript"> var lpsHome = olApp.getProperty("lps.home"), basedir = olApp.getProperty("basedir"), fileSep = java.lang.System.getProperty("file.separator"), projectFolder = "app"; olApp.setProperty("project.folder", projectFolder) </script> <property name="lzx.dir" location="${basedir}/lzx" /> <property name="build.dir" location="${basedir}/build" /> <property name="temp.dir" location="${build.dir}/tmp" /> <property name="release.dir" location="${basedir}/release" /> <path id="laszlo.compiler.classpath"> <pathelement location="${lps.home}/WEB-INF/lps/server/build"/> <pathelement location="${lps.home}/WEB-INF/classes"/> <fileset dir="${lps.home}/WEB-INF/lib" includes="**/*.jar"/> </path> <target name="info" description="Dump useful configuration information before build"> <echo message="Using LPS in ${lps.home}" /> <echo message="Editor appl path relative to $LPS_HOME is $LPS_HOME/${project.folder}" /> <echo message="Timestamp for this build is ${build.timestamp} "/> </target> <target name="clean" depends="info" description="Delete all temporary and generated files and folders."> <script language="javascript"> var file = olApp.getProperty("app.file"); olApp.setProperty("masterSpriteFile", file.substr(0,file.indexOf(".lzx")) + ".sprite.png"); </script> <delete> <fileset dir="${lzx.dir}"> <include name="**/*.sprite.png"/> <include name="**/*.swf10.swf"/> <include name="**/*.lzx.js"/> </fileset> </delete> <delete dir="${lzx.dir}/lps"/> <delete file="${lzx.dir}/${app.file}.js" /> <delete file="${lzx.dir}/${app.file}.swf10.swf" /> <delete file="${lzx.dir}/${masterSpriteFile}" /> <echo message="Property app.file set to ${app.file}" /> <delete dir="${build.dir}" /> <delete dir="${release.dir}" /> </target> <target name="init" depends="clean" description="Create all directories for the build process."> <mkdir dir="${temp.dir}" /> <mkdir dir="${temp.dir}/lzxcompile" /> <mkdir dir="${temp.dir}/lzdeploy" /> <mkdir dir="${build.dir}" /> <mkdir dir="${release.dir}" /> </target> <target name="build" depends="init,compile-lzx" description="Compile Java and LZX source (SWF10 and DHTML), and copy the versions into the release folder."> </target> <target name="copy-files-temp" depends="init"> <echo message="Copying files from ${lzx.dir} to ${temp.dir}/lzxcompile" /> <copy todir="${temp.dir}/lzxcompile"> <fileset dir="${lzx.dir}" casesensitive="no"> <include name="**/*.lzx" /> <include name="**/*.xml" /> <include name="**/*.jsp" /> <include name="**/*.html" /> <include name="**/*.js" /> <include name="**/*.css" /> <include name="**/*.gif" /> <include name="**/*.jpg" /> <include name="**/*.mp3" /> <include name="**/*.pdf" /> <include name="**/*.png" /> <include name="**/*.swf" /> <include name="**/*.ttf" /> </fileset> </copy> </target> <target name="compile-lzx" depends="init,copy-files-temp" > <echo message="Compiling LZX app for SWF10 and DHTML runtime (SOLO)"/> <script language="javascript"> var lzxFile = olApp.getProperty("app.file"); var timestamp = olApp.getProperty("build.timestamp"); var fileNoending = lzxFile.substr(0,lzxFile.indexOf(".lzx")); olApp.setProperty("app.file.timestamp", fileNoending + "." + timestamp + ".lzx"); </script> <move file="${temp.dir}/lzxcompile/${app.file}" tofile="${temp.dir}/lzxcompile/${app.file.timestamp}" /> <antcall target="_solo-compile-file"> <param name="file" value="${temp.dir}/lzxcompile/${app.file.timestamp}" /> <param name="runtime" value="swf10" /> <param name="debug" value="--debug"/> <param name="output" value="${temp.dir}/lzdeploy/swf10-debug.zip" /> </antcall> <antcall target="_unzip-lzdeploy-package"> <param name="output" value="${temp.dir}/lzdeploy/swf10-debug.zip" /> <param name="targetFolder" value="${temp.dir}/lzdeploy/swf10-debug" /> </antcall> <copy file="${temp.dir}/lzxcompile/${app.file.timestamp}.swf10.swf" tofile="${temp.dir}/lzdeploy/swf10-debug/${app.file.timestamp}.swf10.swf" /> <antcall target="_solo-compile-file" > <param name="file" value="${temp.dir}/lzxcompile/${app.file.timestamp}" /> <param name="runtime" value="dhtml" /> <param name="debug" value="--debug"/> <param name="output" value="${temp.dir}/lzdeploy/dhtml-debug.zip" /> </antcall> <antcall target="_unzip-lzdeploy-package"> <param name="output" value="${temp.dir}/lzdeploy/dhtml-debug.zip" /> <param name="targetFolder" value="${temp.dir}/lzdeploy/dhtml-debug" /> </antcall> <antcall target="_solo-compile-file" > <param name="file" value="${temp.dir}/lzxcompile/${app.file.timestamp}" /> <param name="runtime" value="dhtml" /> <param name="output" value="${temp.dir}/lzdeploy/dhtml.zip" /> </antcall> <antcall target="_unzip-lzdeploy-package"> <param name="output" value="${temp.dir}/lzdeploy/dhtml.zip" /> <param name="targetFolder" value="${temp.dir}/lzdeploy/dhtml" /> </antcall> <copy todir="${release.dir}/swf10-debug"> <fileset dir="${temp.dir}/lzdeploy/swf10-debug/"> <include name="**/*.*" /> </fileset> </copy> <copy todir="${release.dir}/dhtml"> <fileset dir="${temp.dir}/lzdeploy/dhtml/"> <exclude name="${app.file.timestamp}.swf10.swf" /> <include name="**/*.*" /> </fileset> </copy> <copy todir="${release.dir}/dhtml-debug"> <fileset dir="${temp.dir}/lzdeploy/dhtml-debug/"> <exclude name="${app.file.timestamp}.swf10.swf" /> <include name="**/*.*" /> </fileset> </copy> </target> <target name="_solo-compile-file"> <echo message="Creating application package for ${file}"/> <echo message="Using LPS_HOME: ${lps.home}"/> <echo message="args: --runtime=${runtime} ${debug} --output ${output}"/> <java classpathref="laszlo.compiler.classpath" classname="org.openlaszlo.utils.DeployMain" fork="yes" failonerror="true"> <jvmarg value="-Xmx1024M"/> <jvmarg value="-DLPS_HOME=${lps.home}"/> <arg line="--runtime=${runtime} --output ${output} ${debug} ${file}"/> </java> </target> <target name="_unzip-lzdeploy-package"> <echo message="Unzipping lzdeploy package ${output}" /> <unzip src="${output}" dest="${targetFolder}"> <patternset> <exclude name="widget-icon.png" /> <exclude name="config.xml" /> <exclude name="**/*.lzx" /> <exclude name="**/*.css" /> </patternset> </unzip> </target> </project>
Place the build script in a subfolder of $ LPS_HOME (the OpenLaszlo home server) called testapp. Create an LZX subdirectory using an OpenLaszlo canvas application called testapp.lzx. I added the image resource to the resources of the subfolder to check if the resources are correctly packed into the compiled folders of the SOLO applications.
$LPS_HOME └── testapp ├── build.xml └── lzx ├── resources │ └── Winnie-the-Pooh.jpg └── testapp.lzx
Go to $ LPS_HOME and run "ant build". The build process should run, and you should have a resulting folder structure:
testapp ├── build │ └── tmp │ ├── lzdeploy (more files) │ └── lzxcompile (more files) ├── build.xml ├── lzx │ ├── resources │ │ └── Winnie-the-Pooh.jpg │ └── testapp.lzx └── release ├── dhtml │ ├── index.html │ ├── lps (more files) │ ├── resources │ │ └── Winnie-the-Pooh.jpg │ ├── testapp.20120810-125652.lzx.js │ └── testapp.20120810-125652.sprite.png ├── dhtml-debug │ ├── index.html │ ├── lps (more files) │ ├── resources │ │ └── Winnie-the-Pooh.jpg │ ├── testapp.20120810-125652.lzx.js │ └── testapp.20120810-125652.sprite.png └── swf10-debug ├── index.html └── lps (more files)
The build process generated three versions of the OpenLaszlo application: SWF with debug, DHTML / HTML5 with and without debugging enabled. All JavaScript and SWF files are timestamped, which means that the new version of the application will not be retrieved from the browser cache. If you point your browser to the release folder, clicking any of the three folders (swf10-debug, dhtml, dhtml-debug) should open the compiled SOLO application.
Add your own scripts to upload the release to the web server, which should not be difficult.