add caching, checksums and timetamps to sdk install

Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/6b0e1829
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/6b0e1829
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/6b0e1829

Branch: refs/heads/master
Commit: 6b0e18296388c782d8a0d5d58a2796fa2c5f64d1
Parents: c0f0e66
Author: Alex Harui <[email protected]>
Authored: Sat Jun 7 07:14:24 2014 -0700
Committer: Alex Harui <[email protected]>
Committed: Sat Jun 7 07:17:24 2014 -0700

----------------------------------------------------------------------
 installer.properties/en_US.properties |   1 +
 installer.xml                         | 307 +++++++++++++++++++++++++----
 2 files changed, 268 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6b0e1829/installer.properties/en_US.properties
----------------------------------------------------------------------
diff --git a/installer.properties/en_US.properties 
b/installer.properties/en_US.properties
index 60a6bad..3075c72 100644
--- a/installer.properties/en_US.properties
+++ b/installer.properties/en_US.properties
@@ -122,3 +122,4 @@ INFO_INSTALLING_PLAYERGLOBAL_SWC=Installing Adobe Flash 
Player playerglobal.swc
 INFO_INSTALLING_CONFIG_FILES=Installing frameworks configuration files 
configured for use with an IDE
 INFO_DOWNLOADING_FILE_FROM=Downloading {0} from: {1}
 INFO_DOWNLOADED=Download complete 
+INFO_VALIDATING_FILE=Validating download:

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6b0e1829/installer.xml
----------------------------------------------------------------------
diff --git a/installer.xml b/installer.xml
index 32bfa7a..97c18de 100644
--- a/installer.xml
+++ b/installer.xml
@@ -22,6 +22,13 @@
 
     <property name="FLEX_HOME" location="${basedir}"/>
     
+       <!-- this script supports the usingDownloadCache property and
+     downloadCacheFolder property to cache downloads in the
+     folder specified by downloadCacheFolder.  This can make
+     a huge difference in future runs although there is some
+     risk around caching bad downloads and/or needing to
+     clean up the cache -->
+    
     <!-- Required for OSX 10.6 / Snow Leopard Performance. -->
     <!-- Java 7 on Mac requires OSX 10.7.3 or higher and is 64-bit only -->
     <!-- local.d32 is set/used in build.properties so this needs to be done 
first. -->
@@ -43,8 +50,41 @@
     <property file="${FLEX_HOME}/installer.properties/en_US.properties"/>
     <property name="download.dir" value="${FLEX_HOME}/in"/>
     
-    <property name="xml.properties" 
value="http://flex.apache.org/installer/sdk-installer-config-4.0.xml"; />
-    
+    <property name="swfobject.url.server" 
value="http://swfobject.googlecode.com"; />
+    <property name="swfobject.url.folder" value="files" />
+    <property name="swfobject.url.file" value="swfobject_2_2.zip" />
+    <property name="swfobject.url.md5" 
value="dec4b83b3e73f3f0011a075cd5385b9c" />
+
+    <property name="osmf.url.server" value="http://downloads.sourceforge.net"; 
/>
+    <property name="osmf.url.folder" 
value="project/osmf.adobe/OSMF%202.0%20Release%20%28final%20source%2C%20ASDocs%2C%20pdf%20guides%20and%20release%20notes%29"
 />
+    <property name="osmf.url.file" value="OSMF.swc" />
+    <property name="osmf.url.md5" value="6385228692ab982630e47422403f6890" />
+
+    <property name="afe.url.server" value="http://opensource.adobe.com"; />
+    <property name="afe.url.folder" 
value="svn/opensource/flex/sdk/branches/4.y/lib" />
+    <property name="afe.url.file" value="afe.jar" />
+    <property name="afe.url.md5" value="d1469e163c4fd4c1ef8be82dd6d0f1ee" />
+
+    <property name="agl.url.server" value="http://opensource.adobe.com"; />
+    <property name="agl.url.folder" 
value="svn/opensource/flex/sdk/branches/4.y/lib" />
+    <property name="agl.url.file" value="aglj40.jar" />
+    <property name="agl.url.md5" value="b9b6b825787489796d9b6bf607a64824" />
+
+    <property name="fontkit.url.server" value="http://opensource.adobe.com"; />
+    <property name="fontkit.url.folder" 
value="svn/opensource/flex/sdk/branches/4.y/lib" />
+    <property name="fontkit.url.file" value="flex-fontkit.jar" />
+    <property name="fontkit.url.md5" value="2abb9f580fa40ad6ef80864f94b6e938" 
/>
+
+    <property name="rideau.url.server" value="http://opensource.adobe.com"; />
+    <property name="rideau.url.folder" 
value="svn/opensource/flex/sdk/branches/4.y/lib" />
+    <property name="rideau.url.file" value="rideau.jar" />
+    <property name="rideau.url.md5" value="3b3329c1b3de665dc116121b772c5369" />
+
+    <property name="blazeds.url.server" value="http://opensource.adobe.com"; />
+    <property name="blazeds.url.folder" 
value="svn/opensource/flex/sdk/branches/4.y/lib" />
+    <property name="blazeds.url.file" value="flex-messaging-common.jar" />
+    <property name="blazeds.url.md5" value="f64cdca3ddfe3068b70197ddb914bb5d" 
/>
+
     <condition property="platform" value="mac">
         <os family="mac" />
     </condition>
@@ -97,8 +137,18 @@
         </and>
     </condition>
 
+    <target name="get-md5-data" depends="get-air-md5-data,get-flash-md5-data">
+    </target>
+    <target name="get-air-md5-data" if="air-has-md5">
+        <property name="air.sdk.url.md5" refid="${air.sdk.url.md5.ref}" />
+    </target>
+    <target name="get-flash-md5-data" if="flash-has-md5">
+        <property name="flash.sdk.url.md5" refid="${flash.sdk.url.md5.ref}" />
+    </target>
+
     <target name="get-data">
-        <property name="do-not-cache-next-get" value="true" />
+               <tstamp />
+               <property name="xml.properties" 
value="http://flex.apache.org/installer/sdk-installer-config-4.0.xml?ts=${DSTAMP}";
 />
         <get src="${xml.properties}" 
dest="${basedir}/sdk-installer-config-4.0.xml" />
         <xmlproperty file="${basedir}/sdk-installer-config-4.0.xml" 
semanticAttributes="true" collapseAttributes="true"/>
         <xmlproperty file="${basedir}/flex-sdk-description.xml" 
semanticAttributes="true" collapseAttributes="true"/>
@@ -122,14 +172,26 @@
                 <equals arg1="${air.version}" arg2="${air.sdk.version}" />
             </not>
         </condition>
-        <property name="air.sdk.url.path.ref" 
value="air.sdk.path.${platform}.${air.sdk.version}" />
-        <property name="air.sdk.url.path" refid="${air.sdk.url.path.ref}" />
+        <property name="air.sdk.url.server.ref" 
value="air.sdk.server.${platform}.${air.sdk.version}" />
+        <property name="air.sdk.url.server" refid="${air.sdk.url.server.ref}" 
/>
+        <property name="air.sdk.url.folder.ref" 
value="air.sdk.folder.${platform}.${air.sdk.version}" />
+        <property name="air.sdk.url.folder" refid="${air.sdk.url.folder.ref}" 
/>
         <property name="air.sdk.url.file.ref" 
value="air.sdk.file.${platform}.${air.sdk.version}" />
         <property name="air.sdk.url.file" refid="${air.sdk.url.file.ref}" />
-        <property name="flash.sdk.url.path.ref" 
value="flash.sdk.path.${flash.sdk.version}" />
-        <property name="flash.sdk.url.path" refid="${flash.sdk.url.path.ref}" 
/>
+        <property name="air.sdk.url.md5.ref" 
value="air.sdk.md5.${platform}.${air.sdk.version}" />
+               <condition property="air-has-md5">
+                       <isreference refid="${air.sdk.url.md5.ref}" />
+               </condition>
+        <property name="flash.sdk.url.server.ref" 
value="flash.sdk.server.${flash.sdk.version}" />
+        <property name="flash.sdk.url.server" 
refid="${flash.sdk.url.server.ref}" />
+        <property name="flash.sdk.url.folder.ref" 
value="flash.sdk.folder.${flash.sdk.version}" />
+        <property name="flash.sdk.url.folder" 
refid="${flash.sdk.url.folder.ref}" />
         <property name="flash.sdk.url.file.ref" 
value="flash.sdk.file.${flash.sdk.version}" />
         <property name="flash.sdk.url.file" refid="${flash.sdk.url.file.ref}" 
/>
+        <property name="flash.sdk.url.md5.ref" 
value="flash.sdk.md5.${flash.sdk.version}" />
+               <condition property="flash-has-md5">
+                       <isreference refid="${flash.sdk.url.md5.ref}" />
+               </condition>
         <property name="flash.sdk.swfversion.ref" 
value="flash.sdk.swfversion.${flash.sdk.version}" />
         <property name="flash.sdk.swfversion" 
refid="${flash.sdk.swfversion.ref}" />
         <property name="flash.sdk.default.swfversion.ref" 
value="flash.sdk.swfversion.${playerglobal.version}" />
@@ -141,7 +203,7 @@
         </condition>
     </target>
     
-    <target name="install" 
depends="get-data,check-binary,ask-licenses,get-third-party-files,fixup-config-files"
 description="Converts binary package to IDE compatible folder">
+    <target name="install" 
depends="get-data,get-md5-data,check-binary,ask-licenses,get-third-party-files,fixup-config-files"
 description="Converts binary package to IDE compatible folder">
         <delete dir="${download.dir}" />
         <echo>${install.complete.echo}</echo>
     </target>
@@ -276,10 +338,22 @@
     </target>
         
     <target name="air-get" depends="air-get-check" unless="air.downloaded">
-        <echo>${AIRDownloadEcho} ${air.sdk.url.path}/${air.sdk.url.file}</echo>
-        <get src="${air.sdk.url.path}/${air.sdk.url.file}"
-            dest="${download.dir}/${air.sdk.url.file}"
-            verbose="false"/>
+        <echo>${AIRDownloadEcho} 
${air.sdk.url.server}/${air.sdk.url.folder}/${air.sdk.url.file}</echo>
+        <antcall target="download_air" >
+            <param name="srcDomain" value="${air.sdk.url.server}" />
+            <param name="srcFolder" value="${air.sdk.url.folder}" />
+            <param name="srcFile" value="${air.sdk.url.file}" />
+            <param name="dest" value="${download.dir}/${air.sdk.url.file}" />
+            <param name="failmessage" value="AIR SDK download failed" />
+        </antcall>
+        <antcall target="download_air_with_md5" >
+            <param name="srcDomain" value="${air.sdk.url.server}" />
+            <param name="srcFolder" value="${air.sdk.url.folder}" />
+            <param name="srcFile" value="${air.sdk.url.file}" />
+            <param name="dest" value="${download.dir}/${air.sdk.url.file}" />
+            <param name="failmessage" value="AIR SDK download failed" />
+            <param name="md5" value="${air.sdk.url.md5}" />
+        </antcall>
     </target>
     
     <target name="air-setup-win" if="isWindows">
@@ -466,10 +540,24 @@
         
         <mkdir dir="${download.dir}"/>
         <mkdir dir="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}"/>
-        <echo>${INFO_INSTALLING_PLAYERGLOBAL_SWC} 
${flash.sdk.url.path}/${flash.sdk.url.file}</echo>
-        <get src="${flash.sdk.url.path}/${flash.sdk.url.file}"
-        
dest="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc"
-        verbose="false"/>
+        <echo>${INFO_INSTALLING_PLAYERGLOBAL_SWC} 
${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}</echo>
+        <antcall target="download_flash" >
+            <param name="srcDomain" value="${flash.sdk.url.server}" />
+            <param name="srcFolder" value="${flash.sdk.url.folder}" />
+            <param name="srcFile" value="${flash.sdk.url.file}" />
+            <param name="dest" 
value="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc"
 />
+                       <param name="message" 
value="${INFO_INSTALLING_PLAYERGLOBAL_SWC} 
${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}" />
+                       <param name="failmessage" value="Flash SDK download 
failed" />
+        </antcall>
+        <antcall target="download_flash_with_md5" >
+            <param name="srcDomain" value="${flash.sdk.url.server}" />
+            <param name="srcFolder" value="${flash.sdk.url.folder}" />
+            <param name="srcFile" value="${flash.sdk.url.file}" />
+            <param name="dest" 
value="${FLEX_HOME}/frameworks/libs/player/${flash.sdk.version}/playerglobal.swc"
 />
+                       <param name="message" 
value="${INFO_INSTALLING_PLAYERGLOBAL_SWC} 
${flash.sdk.url.server}/${flash.sdk.url.folder}/${flash.sdk.url.file}" />
+                       <param name="failmessage" value="Flash SDK download 
failed" />
+                       <param name="md5" value="${flash.sdk.url.md5}" />
+        </antcall>
     </target>
     
     <!-- swfobject.js (Version 2.2) -->
@@ -489,10 +577,15 @@
         <echo>${swfobject.echo}</echo>
         
         <mkdir dir="${download.dir}"/>
-        <get src="http://swfobject.googlecode.com/files/swfobject_2_2.zip";
-            dest="${download.dir}/swfobject_2_2.zip"
-            verbose="false"/>
-        
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${swfobject.url.server}" />
+            <param name="srcFolder" value="${swfobject.url.folder}" />
+            <param name="srcFile" value="${swfobject.url.file}" />
+            <param name="dest" value="${download.dir}/swfobject_2_2.zip" />
+                       <param name="failmessage" value="SWFObject download 
failed" />
+                       <param name="md5" value="${swfobject.url.md5}" />
+        </antcall>
+
         <echo>${INFO_DOWNLOADED}</echo>
         <unzip src="${download.dir}/swfobject_2_2.zip" 
dest="${FLEX_HOME}/templates">
             <patternset>
@@ -521,10 +614,15 @@
         <echo>${osmf.echo}</echo>
 
         <mkdir dir="${basedir}/frameworks/libs/"/>
-        <get 
src="http://downloads.sourceforge.net/project/osmf.adobe/OSMF%202.0%20Release%20%28final%20source%2C%20ASDocs%2C%20pdf%20guides%20and%20release%20notes%29/OSMF.swc";
-        dest="${basedir}/frameworks/libs/osmf.swc"
-        verbose="false"/>
-        
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${osmf.url.server}" />
+            <param name="srcFolder" value="${osmf.url.folder}" />
+            <param name="srcFile" value="${osmf.url.file}" />
+            <param name="dest" value="${basedir}/frameworks/libs/osmf.swc" />
+                       <param name="failmessage" value="OSMF download failed" 
/>
+                       <param name="md5" value="${osmf.url.md5}" />
+        </antcall>
+
         <unzip src="${basedir}/frameworks/libs/osmf.swc" 
dest="${download.dir}">
             <patternset>
                 <include name="library.swf"/>
@@ -557,9 +655,14 @@
         <echo>${afe.echo}</echo>
 
         <mkdir dir="${basedir}/lib/external/optional"/>
-        <get 
src="http://opensource.adobe.com/svn/opensource/flex/sdk/branches/4.y/lib/afe.jar";
-        dest="${basedir}/lib/external/optional/afe.jar"
-        verbose="false"/>
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${afe.url.server}" />
+            <param name="srcFolder" value="${afe.url.folder}" />
+            <param name="srcFile" value="${afe.url.file}" />
+            <param name="dest" 
value="${basedir}/lib/external/optional/afe.jar" />
+                       <param name="failmessage" value="afe.jar download 
failed" />
+                       <param name="md5" value="${afe.url.md5}" />
+        </antcall>
 
         <echo 
file="${basedir}/agl.properties">agl.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
         <replace file="${basedir}/agl.properties" token="{0}" 
value="aglj40.jar" />
@@ -568,9 +671,14 @@
         <delete file="${basedir}/agl.properties" />
         <echo>${agl.echo}</echo>
         
-        <get 
src="http://opensource.adobe.com/svn/opensource/flex/sdk/branches/4.y/lib/aglj40.jar";
-        dest="${basedir}/lib/external/optional/aglj40.jar"
-        verbose="false"/>
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${agl.url.server}" />
+            <param name="srcFolder" value="${agl.url.folder}" />
+            <param name="srcFile" value="${agl.url.file}" />
+            <param name="dest" 
value="${basedir}/lib/external/optional/aglj40.jar" />
+                       <param name="failmessage" value="aglj40.jar download 
failed" />
+                       <param name="md5" value="${agl.url.md5}" />
+        </antcall>
 
         <echo 
file="${basedir}/fontkit.properties">fontkit.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
         <replace file="${basedir}/fontkit.properties" token="{0}" 
value="flex-fontkit.jar" />
@@ -579,10 +687,14 @@
         <delete file="${basedir}/fontkit.properties" />
         <echo>${fontkit.echo}</echo>
         
-        <get 
src="http://opensource.adobe.com/svn/opensource/flex/sdk/branches/4.y/lib/flex-fontkit.jar";
-        dest="${basedir}/lib/external/optional/flex-fontkit.jar"
-        verbose="false"/>
-
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${fontkit.url.server}" />
+            <param name="srcFolder" value="${fontkit.url.folder}" />
+            <param name="srcFile" value="${fontkit.url.file}" />
+            <param name="dest" 
value="${basedir}/lib/external/optional/flex-fontkit.jar" />
+                       <param name="failmessage" value="flex-fontkit.jar 
download failed" />
+                       <param name="md5" value="${fontkit.url.md5}" />
+        </antcall>
 
         <echo 
file="${basedir}/rideau.properties">rideau.echo=${INFO_DOWNLOADING_FILE_FROM}</echo>
         <replace file="${basedir}/rideau.properties" token="{0}" 
value="rideau.jar" />
@@ -591,9 +703,14 @@
         <delete file="${basedir}/rideau.properties" />
         <echo>${rideau.echo}</echo>
         
-        <get 
src="http://opensource.adobe.com/svn/opensource/flex/sdk/branches/4.y/lib/rideau.jar";
-        dest="${basedir}/lib/external/optional/rideau.jar"
-        verbose="false"/>
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${rideau.url.server}" />
+            <param name="srcFolder" value="${rideau.url.folder}" />
+            <param name="srcFile" value="${rideau.url.file}" />
+            <param name="dest" 
value="${basedir}/lib/external/optional/rideau.jar" />
+                       <param name="failmessage" value="rideau.jar download 
failed" />
+                       <param name="md5" value="${rideau.url.md5}" />
+        </antcall>
         
         <!-- fontkit expects swfutils in the same folder -->
         <copy file="${basedir}/lib/swfutils.jar" 
tofile="${basedir}/lib/external/optional/swfutils.jar" />
@@ -616,9 +733,14 @@
         <echo>${blaze.echo}</echo>
         
         <mkdir dir="${basedir}/lib/external/optional"/>
-        <get 
src="http://opensource.adobe.com/svn/opensource/flex/sdk/branches/4.y/lib/flex-messaging-common.jar";
-        dest="${basedir}/lib/external/optional/flex-messaging-common.jar"
-        verbose="false"/>
+        <antcall target="download_using_get" >
+            <param name="srcDomain" value="${blazeds.url.server}" />
+            <param name="srcFolder" value="${blazeds.url.folder}" />
+            <param name="srcFile" value="${blazeds.url.file}" />
+            <param name="dest" 
value="${basedir}/lib/external/optional/flex-messaging-common.jar" />
+                       <param name="failmessage" 
value="flex-messaging-common.jar download failed" />
+                       <param name="md5" value="${blazeds.url.md5}" />
+        </antcall>
     </target>
 
 
@@ -686,4 +808,109 @@
         </replace>
     </target>
         
+    <target name="download_air" unless="air-has-md5">
+        <antcall target="download_using_get" />
+    </target>
+    <target name="download_air_with_md5" if="air-has-md5">
+        <antcall target="download_using_get" />
+    </target>
+    <target name="download_flash" unless="flash-has-md5">
+        <antcall target="download_using_get" />
+    </target>
+    <target name="download_flash_with_md5" if="flash-has-md5">
+        <antcall target="download_using_get" />
+    </target>
+
+    <!--
+     Download a file and optionally verify the checksum.
+     If the checksum fails, this script fails.  This
+     target uses the cache, if desired.
+     
+     Params are:
+     srcDomain
+     srcFolder
+     srcFile
+     dest
+     [md5]
+     [srcMD5Domain]
+     -->
+    <target name="download_using_get" depends="check-cache"
+        description="Downloads file, and optionally verifies checksum.">
+        
+        <antcall target="get-if-not-cached">
+        </antcall>
+        <antcall target="copy-if-cached">
+        </antcall>
+    </target>
+    
+    <target name="get-if-not-cached" unless="found-in-cache">
+               <antcall target="get-with-no-params" />
+               <antcall target="get-with-params" />
+               <antcall target="get-local" />
+        <antcall target="check-sum" />
+        <condition property="skipCache">
+            <not>
+                <isset property="usingDownloadCache" />
+            </not>
+        </condition>
+        <antcall target="put-in-cache" />
+    </target>
+    
+       <target name="check-params" >
+               <condition property="has-params">
+                       <and>
+                               <contains 
string="${srcDomain}/${srcFolder}/${srcFile}" substring="?" />
+                               <not>
+                                       <contains 
string="${srcDomain}/${srcFolder}/${srcFile}" substring="file://" />
+                               </not>
+                       </and>
+               </condition>
+               <condition property="is-local">
+                       <contains string="${srcDomain}/${srcFolder}/${srcFile}" 
substring="file://" />
+               </condition>
+               <condition property="not-local-no-params">
+                       <and>
+                               <not>
+                                       <contains 
string="${srcDomain}/${srcFolder}/${srcFile}" substring="file://" />
+                               </not>
+                               <not>
+                                       <contains 
string="${srcDomain}/${srcFolder}/${srcFile}" substring="?" />
+                               </not>
+                       </and>
+               </condition>
+       </target>
+       
+       <target name="get-local" depends="check-params" if="is-local" >
+        <get src="${srcDomain}/${srcFolder}/${srcFile}" dest="${dest}"/>
+       </target>
+       <target name="get-with-no-params" depends="check-params" 
if="not-local-no-params" >
+        <get src="${srcDomain}/${srcFolder}/${srcFile}?ts=${DSTAMP}" 
dest="${dest}"/>
+       </target>
+       <target name="get-with-params" depends="check-params" if="has-params" >
+        <get src="${srcDomain}/${srcFolder}/${srcFile}&amp;ts=${DSTAMP}" 
dest="${dest}"/>
+       </target>
+       
+    <target name="copy-if-cached" if="found-in-cache">
+        <copy file="${downloadCacheFolder}/${srcFolder}/${srcFile}" 
tofile="${dest}" overwrite="true" />
+    </target>
+    
+    <target name="check-cache" if="usingDownloadCache">
+        <available file="${downloadCacheFolder}/${srcFolder}/${srcFile}" 
property="found-in-cache" />
+    </target>
+    
+    <target name="put-in-cache" unless="skipCache">
+        <copy tofile="${downloadCacheFolder}/${srcFolder}/${srcFile}" 
file="${dest}" />
+    </target>
+    
+    <target name="check-sum" if="md5"
+        description="Verifies MD5 checksum, and fails if checksum doesn't 
match">
+        
+        <echo>${INFO_VALIDATING_FILE} ${dest}</echo>
+        <checksum file="${dest}" algorithm="MD5" verifyproperty="we.failed" 
property="${md5}" />
+        <fail message="${failmessage}">
+            <condition>
+                <equals arg1="${we.failed}" arg2="false" />
+            </condition>
+        </fail>
+    </target>
 </project>

Reply via email to