Changes from Ant 1.7.1 TO Ant 1.8.0RC1 ====================================== Changes that could break older environments: ------------------------------------------- * if and unless attributes (on <target> as well as various tasks and other elements) have long permitted ${property} interpolation. Now, if the result evaluates to "true" or "false" (or "yes", "no", "on", "off"), that boolean value will be used; otherwise the traditional behavior of treating the value as a property name (defined ~ true, undefined ~ false) is used. Existing scripts could be broken if they perversely defined a property named "false" and expected if="false" to be true, or used if="true" expecting this to be triggered only if a property named "true" were defined. * Ant now requires Java 1.4 or later. * Improved handling of InterruptException (lets suppose someone/thing is trying to kill the thread when we receive an InterruptException), when an InterruptException is received, we do not wait anymore in a while loop till the end time has been reached. Bugzilla Report 42924. * Refactor PropertyHelper and introspection APIs to make extension more granular and support setting task/type attribute values to objects decoded by custom PropertyEvaluator delegates. Also add <propertyhelper> task for registering delegates and/or replacing the registered PropertyHelper instance. Bugzilla Report 42736. * Added a restricted form of typedef called <componentdef>. This allows definition of elements that can only be within tasks or types. This method is now used to define conditions, selectors, comparators and filterreaders. This means that tasks may now have nested conditions just by implementing the Condition interface, rather than extending ConditionBase. It also means that the use of namespaces for some of the selectors introduced in Ant 1.7.0 is no longer necessary. Implementing this means that the DynamicElement work-around introduced in Ant 1.7.0 has been removed. Bugzilla Report 40511. * In the <touch> task when a <mapper> is used, the millis and datetime attributes now override the time of the source resource if provisioned. Bugzilla Report 43235. * Remove fall-back mechanism for references that are not resolved during normal runtime execution. * FileUtils.createTempFile now actually creates the file. The TempFile task still does not create the file by default, can be instructed to do so however using a new parameter. Bugzilla Report 33969. * A lock in Project ensured that a BuildListener's messageLogged method was only ever executed by a single thread at a time, while all other methods could be invoked by multiple threads simultaniously (while within <parallel>, for example). This lock is no longer in place, messageLogged should be made thread-safe now. * <sql>'s onError="stop" no longer fails the build if an error occurs, this is the main difference between stop and error and matches what the documentation implied. Bugzilla Report 24668. * Ant's configuration introspection mechanisms have been modified to prefer Resource and FileProvider attributes to plain java.io.File attributes; however the configuration-from-String behavior remains equivalent, rendering a FileResource. * CBZip2InputStream will now throw an IOException if passed in a null or empty InputStream to read from. Bugzilla Reports 32200. * <unzip> will now fail when trying to extract certain broken archives that would have been silently ignored in earlier version. Bugzilla Report 35000. * Ant's <zip> family of tasks tries to preserve the existing Unix permissions when updating archives or copying entries from one archive to another. Since not all archiving tools support storing Unix permissions in the same way that is used by Ant, sometimes the permissions read by Ant seem to be 0, which means nobody is allowed to do anything to the file or directory. If Ant now encounters a permission set of 0 it will assume that this is not the intended value and instead apply its own default values. Ant used to create entries with 0 permissions itself. The <zip> family of tasks has a new attribute preserve0permissions that can be set to restore the old behavior. Bugzilla Report 42122. * If a batch containing multiple JUnit tests running inside a forked Java VM caused the VM to crash (or caused a timeout), the formatters would receive an error message for the last test in the batch. Ant will now pass in a test with the name "Batch-With-Multiple-Tests" instead - this is supposed to show more clearly that the last test may not have started at all. Bugzilla Report 45227. * If the number of minutes a build takes is bigger then 1000 Ant will no longer print a thousands separator in the "elapsed time" message. It used to be the thousands separator of the current locale. Bugzilla Report 44659. * <symlink action="delete"> used to fail if the link was broken (i.e. pointing to a file or directory that no longer existed). It will now silently try to remove the link. Bugzilla Report 41285. * <delete file="..."> used to log a warning and not delete broken symbolic links. <delete dir="..."/> didn't even log a warning. The task will now try to delete them in both cases. Bugzilla Report 41285. * if the dir attribute of a <fileset> points to a symbolic link and followsymlinks is set to false, the fileset will no longer be scanned and always seem empty. Bugzilla Report 45741. * the .NET tasks that have been deprecated since Ant 1.7.0 have been removed, please use the stand-alone Antlib you can find at http://ant.apache.org/antlibs/dotnet/index.html instead. * the logic of closing streams connected to forked processes (read the input and output of <exec> and friends) has been changed to deal with cases where child processes of the forked processes live longer than their parents and keep Ant from exiting. It is unlikely but possible that the changed logic breaks stream handling on certain Java VMs. Bugzilla issue 5003. * <checksum>'s totalproperty was platform dependent because it relied on java.io.File#compareTo. It has now been made platform independent, which means that totalPropery values obtained on Windows (and other systems where the sort order of File is not case sensitive) can be different from the values obtained with earlier versions of Ant. Bugzilla Report 36748. * globmapper didn't work properly if the "to" or "from" patterns didn't contain a "*". In particular it implicitly added a * to the end of the pattern(s). This is no longer the case. If you relied on this behavior you will now need to explicitly specify the trailing "*". Bugzilla Report 46506. * <copy> silently ignored missing resources even with failOnError="true". If your build tries to copy non-existant resources and you relied on this behavior you must now explicitly set failOnError to false. Bugzilla Report 47362. * Ant now prefers the java.runtime.version system property over java.vm.version for the Created-By Manifest attribute. Bugzilla Report 47632. * The <image> task now supports a nested mapper. In order to implement this, the Java API of the task had to change so any custom subclass overriding the processFile method will need to adapt (by overriding the new two-arg processFile method). Bugzilla Report 23243. * A new property syntax can be used to set attributes from references: ${ant.ref:some-reference} In most cases this will yield the exact same result as ${toString:some-reference} - only when an attribute setter method accepts an object type other than string and the project's reference is an Object of matching type the new syntax will pass in that object. If your build file already contains properties whose name starts with "ant.ref:" there is a potential for collision. If your property has been set, normal property expansion will take precedence over the new syntax. If the property has not been set and a reference with the postfix of your property name exists (i.e. in a very unlikely event) then the new syntax would yield a different result (an expanded property) than Ant 1.7.1 did. * A ProjectHelper implementation can now provide the default build file name it is expecting, and can specify if they can support a specific build file. So Ant is now capable of supporting several ProjectHelper implementations, deciding on which to use depending of the input build file. Fixed bugs: ----------- * The default logger was failing to print complete stack traces for exceptions other than BuildException when inside <ant> or <antcall>, thus omitting often important diagnostic information. Bugzilla 43398 (continued). * Better handling of package-info.class. Bugzilla Report 43114. * RPM task needed an inserted space between the define and the value. Bugzilla Report 46659. * Got rid of deadlock between in, out and err in the Redirector. Bugzilla Report 44544. * Caused by AssertionError no longer filtered. Bugzilla Report 45631. * <zip> would sometimes recreate JARs unnecessarily. Bugzilla Report 45902. * <symlink> task couldn't overwrite existing symlinks that pointed to nonexistent files Bugzilla Report 38199. * <symlink> task couldn't overwrite files that were in the way of the symlink. Bugzilla Report 43426. * <symlink> task failonerror="false" does not stop build from failing when 'ln' command returns non-zero. Bugzilla Report 43624 * <touch> task couldn't differentiate between "no resources specified" and "no resources matched." Bugzilla Report 43799. * ManifestClassPath failed when a relative path would traverse the file system root. Bugzilla Report 44499. * <globmapper> had an indexoutofbounds when the prefix and postfix overlapped. Bugzilla Report 44731. * <typedef> and <taskdef> failed to accept file names with # characters in them. Bugzilla Report 45190 * A deadlock could occur if a BuildListener tried to access an Ant property within messageLogged while a different thread also accessed one. Bugzilla Report 45194 * Handle null result of system getProperty() in CommandlineJava. Similar to Bugzilla Report 42334. * Length task did not process nonexistent Resources even though these might conceivably still carry file length information. Bugzilla Report 45271. * <javac>'s includeJavaRuntime="false" should work for gcj now. Note that you may need to set includeAntRuntime to false in order to have full control. Bugzilla Report 34638. * <sql> would fail if the executed statment didn't return a result set with some JDBC driver that dissalow Statement.getResultSet to be called in such a situation. Bugzilla Report 36265 * if the executed statement in <sql> returned a result set and an update count, the count would be lost. * if an executed statement in <sql> mixes update count and result set parts, some result sets wouldn't get printed. Bugzilla Report 32168. * XmlLogger could lose messages if <parallel> is used. Bugzilla Report 25734. * <scp> creates remoteToDir if it doesn't exist. Bugzilla Report 42781 * CBZip2OutputStream threw an exception if it was closed prior to writing anything. Bugzilla Reports 32200, 45836 * The IPlanetDeploymentTool didn't use the configured DTD locations. Bugzilla Report 31876. * The ant shell script printed a warning under Cygwin if JAVA_HOME was not set. Bugzilla Report 45245. * <filterset> sometimes incorrectly flagged infinite recursions of filter tokens Bugzilla Report 44226. * failures were treated as errors in forked JUnit tests when JUnit 4 was used. Bugzilla Report 43892. * <jar> and <manifest> disallowed manifest attributes whose name contained the character '8'. Bugzilla Report 45675. * BigProjectLogger would set the project's basedir to the current working directory. Bugzilla Report 45607. * only <formatter>s that logged to a file were notified if forked VM crashed or a timeout occured in <junit>. Bugzilla Report 37312. * ant -v -version would print the version information twice. Bugzilla Report 45695. * when nested into builds that have been invoked by <ant> tasks <subant> might set the wrong basedir on the called projects. Bugzilla Report 30569. * If the message of the failed assertion of a forked JUnit test contained line feeds some excess output ended up in Ant's log. Bugzilla Report 45411. * <symlink action="delete"> failed to delete a link that pointed to a parent directory. Bugzilla Report 45743. * <symlink action="delete"> failed if ant lacked permission to rename the link's target. Bugzilla Report 41525. * when checking whether a jar is signed, <signjar> ignored the sigfile attribute. Bugzilla Report 44805. * When using JavaMail all <mail> tasks used the same mail host regardless of their configuration. Bugzilla Report 37970. * <signjar> and <issigned> didn't handle aliases with characters other than numbers, letters, hyphen or underscore properly. Bugzilla Report 45820. * <filterset> could miss multi-character begin tokens in some cases. Bugzilla Report 45094. * <depend> didn't close JARs that were part of the classpath. Bugzilla Report 45955. * in some cases <depend> would delete class files even if it didn't find the corresponding source files. Bugzilla Report 45916. * <javadoc> failed if the nested <bottom> or <head> contained line breaks. Bugzilla Report 43342. * encoding="auto" has been broken in <mail> since Ant 1.7.0 and only worked if JavaMail was available. Bugzilla Report 42389. * MailLogger could cause a NullPointerException. Bugzilla Report 44009. * <junit> didn't recognize failed assertions as failures if they caused subclasses of AssertionError to be thrown (like org.junit.ComparisonFailure that is thrown when assertEquals fails). Bugzilla Report 45028. * the Unix "ant" wrapper script failed to protect wildcards in command line arguments in some cases. Bugzilla Report 31601. * <cvstagdiff> crippled file names and could miss some entries if multiple modules have been specified. Bugzilla Report 35301. * Tasks with a "public void add(SomeType)" method failed to work as TaskContainers at the same time. Bugzilla Report 41647. * Tasks that implementes DynamicElemen or DynamicElementNS failed to work as TaskContainers at the same time. Bugzilla Report 41647. * combining SSL and authentication in <mail> and MailLogger failed in some setups. Bugzilla Report 46063. * if an error occurs while logging the buildFinished event, the original error is now logged to System.err. Bugzilla Report 25086. * <copy> failed with a NullPointerException when copying a resource without a name. It will now fail with a meaningful error message. Bugzilla Report 39960. * <xslt> now uses the configured classpath to load the factory (when using TraX) before falling back to Ant's own classpath. Bugzilla Report 46172. * <dependset> complained about files being modified in the future if they had been just very recently (within Ant's assumed granularity of the file system). Bugzilla Report 43665. * <sshexec> didn't store the ouput in outputproperty if the remote command failed. Bugzilla Report 46340. * DirectoryScanner's slow-scanning algorithm that is used when you ask for excluded or not-included files and/or directories could miss some files and directories in the presence of recursive exclude patterns. * <sort> resource collection kept only one of entries deemed equal by the chosen Comparator. Bugzilla Report 46527. * the ZipFile class used by <unzip> and others could leave the archive open (making it undeletable on Windows as long as the java VM was running) for files with an unexpected internal structure. Bugzilla Report 46559. * The zip package now supports the extra fields invented by InfoZIP in order to store Unicode file names and comments. * The zip package detects the encoding bit set by more modern archivers when they write UTF-8 filenames and optionally sets it when writing zips or jars. Bugzilla Report 45548 * <sync> could run into a NullPointerException when faced with broken symbolic links. Bugzilla Report 46747. * The ant shell script should now support MSYS/MinGW as well. Bugzilla Report 46936. * <signjar> has a new force attribute that allows re-signing of jars that are already signed. Bugzilla Report 46891. * <sshexec> now again honors failonerror in the face of connection errors. Bugzilla Report 46829. * The <replacetokens> filter threw an exception if the stream to filter ended with a begin token. Bugzilla Report 47306. * <scriptmapper>, <scriptfilter> and <scriptcondition> didn't support the setbeans attribute. Bugzilla Report 47336. * <loadproperties>' encoding attribute didn't work. Bugzilla Report 47382. * Ant created tar archives could contain random bytes at the end which confused some untar implementations. Bugzilla Report 47421. * various places where unchecked PrintWriters could hide exceptions have been revisited to now check the error status or not use a PrintWriter at all. Bugzilla Report 43537. * filesetmanifest="mergewithoutmain" in <jar> didn't treat inline manifests as expected. Bugzilla Report 29731. * <record> didn't work properly with nested builds. Bugzilla Report 41368. * <jar> with filesetmanifest different from skip didn't work if the update attribute has been set to true. Bugzilla Report 30751. * The default stylesheets for <junitreport> failed to properly escape XML content in exception stack traces. Bugzilla Report 39492. * AntClassLoader didn't set the proper CodeSource for loaded classes. Bugzilla Report 20174. * AntClassLoader.getResourceAsStream would return streams to resources it didn't return with getResource and to classes it failed to load. Bugzilla Report 44103. * Logging exceptions without a message would cause a NullPointerException. Bugzilla Report 47623. * WeblogicDeploymentTool could fail on platforms with a file separator other than "/". Bugzilla Report 35649. * The update attribute of the modified selector was ignored. Bugzilla Report 32597. * <manifest> and <jar> can now merge Class-Path attributes from multiple sources and optionally flatten them into a single attribute. The default behaviour still is to keep multiple Class-Path attributes if they have been specified and to only include the attributes of the last merged manifest. Bugzilla Report 39655. * <delete> didn't work correctly with a <modified> selector because it was scanning the same filesets more than once. Bugzilla Report 43574. * when using custom filterreaders with the <filterreader classname=""> syntax Ant could leak memory. The problem didn't occur when using <typedef> or <componentdef> to define the filterreader which is the recommended approach. Bugzilla Report 45439. * Ant didn't set the proper "magic" value for tar entries containing long file names in GNU longfile mode. Bugzilla Report 47653. * The tar task failed to recognize that the archive had to be (re-)created in some cases where the sources are filesystem based resources but not filesets. Bugzilla Report 48035. * <sshexec>'s outputproperty was prefixed by the executed command when the command attribute has been used, breaking backwards compatibility to Ant 1.7.0. Bugzilla Report 48040. * different task instances of the same <scriptdef>ed tasks could overwrite each others attributes/nested elements. Bugzilla Report 41602. * The Hashvalue algortihm implementation of the modified task could fail to read the file(s) completely. Bugzilla Report 48313. Other changes: -------------- * The get task now also follows redirects from http to https Bugzilla Report 47433 * A HostInfo task was added performing information on hosts, including info on the host ant is running on. Bugzilla Reports 45861 and 31164. * There is now a FileProvider interface for resources that act as a source of filenames. This should be used by tasks that require resources to provide filenames, rather than require that all resources are instances or subclasses of FileResource. Bugzilla Report 43348 * There is now a URLProvider interface for resources that act as a source of URLs. This should be used by tasks that require resources to provide URLs, rather than require that all resources are instances or subclasses of URLResource. * Fixcrlf now gives better error messages on bad directory attributes. Bugzilla Report 43936 * a new property ant.project.default-target holds the value of the current <project>'s default attribute. * a new property ant.project.invoked-targets holds a comma separated list of the targets that have been specified on the command line (the IDE, an <ant> task ...) when invoking the current project. * The <type> resource selector has had an "any" type added for better configurability. * Ant should detect the OS as both a Mac and a Unix system when running on OpenJDK. Bugzilla Report 44889. * new protected getConnection and getStatement methods allow subclasses of SQLExec more control - or access to the cached instances when overriding other methods like runStatements. Bugzilla Report 27178. * <sql> has a new failOnConnectionError attribute that can be used to keep a build going even if the task failed to connect to the database. Bugzilla Report 36712. * A new attribute strictDelimiterMatching can be used to ignore case or whitespace differences when <sql> searches for delimiters. This is useful if you execute a SQL script that has contains "GO" and "go" as delimiters. Bugzilla Report 26459. * A new showWarnings attribute of <sql> allows warnings to be logged. Bugzilla Report 41836. * A new treatWarningsAsErrors attribute of <sql> can be used to fail a build if a warning occurs. Bugzilla Report 41836. * Ant now supports scoped properties (see Local task). Bugzilla Report 23942. * <sql>'s CSV output can be controlled via the new attributes csvColumnSeparator and csvQuoteCharacter. Bugzilla Report 35627. * <ftp>'s logging has been improved. Bugzilla Reports 30932, 31743. * It is now possible to disable <ftp>'s remote verification. Bugzilla Report 35471. * <sshexec> now supports input in a way similar to <exec> Bugzilla Report 39197. * <scp> can now preserve the file modification time when downloading files. Bugzilla Report 33939. * the new task sshsession can run multiple tasks in the presence of an SSH session providing (local and remote) tunnels. Bugzilla Report 43083. * ZipOutputStream has been sped up for certain usage scenarios that are not used by Ant's family of zip tasks. Bugzilla Report 45396. * <echo> supports an "output" Resource attribute as an alternative to "file". * <sql> "output" attribute now supports any Resource in addition to a file. * <scp> no longer requires a passphrase when using key based authentication. Bugzilla Report 33718. * a new failOnEmptyArchive attribute on <unzip> and <untar> can now make the task fail the build if it tries to extract an empty archive. * <unzip> and <untar> have a new attribute stripAbsolutePathSpec. When set to true, Ant will remove any leading path separator from the archived entry's name before extracting it (making the name a relative file name). Bugzilla Report 28911. * <unzip> will now detect that it was asked to extract a file that is not an archive earlier if the file is big. Bugzilla Report 45463. * New file and resource selectors <readable/> and <writable/> have been added that select file which the current process can read or write. Bugzilla Report 45081. * The filename file selector has a new attribute regex that allows files to be selected by matching their names against a regular expression. Bugzilla Report 45284 * The name resource selector has a new attribute regex that allows resources to be selected by matching their names against a regular expression. Bugzilla Report 45284 * Enhanced performance of Project.fireMessageLoggedEvent and DirectoryScanner Bugzilla Reports 45651 and 45665 * The package list location for offline links can now be specified as an URL. Bugzilla Report 28881 * <echoxml> now supports XML namespaces. Bugzilla Report 36804. * A new listener for <junit> has been added that tries to invoke the tearDown method of a TestCase if that TestCase was run in a forked VM and the VM crashed or a timeout occured. See the <junit> task's manual page for details. Bugzilla Report 37241. * The Jar task now supports the addition of a jar index file in update mode. Previously the absence of the index was not enough to trigger the rebuild; some other update was necessary. Bugzilla report 45098. * <ant> has a new attribute "useNativeBasedir" that makes the child build use the same basedir it would have used if invoked from the command line. No matter what other attributes/properties have been set. Bugzilla Report 45711. * <patch> has a new optional failOnError attribute. Bugzilla Report 44772. * Antlib descriptors will now be parsed by the configured ProjectHelper if the implementation overrides the new canParseAntlibDescriptor and parseAntlibDescriptor methods. If the configured helper doesn't override the methods, a new instance of ProjectHelper2 will be used just like in Ant 1.7.1. Bugzilla Report 42208. * It is now possible to explicitly set the executable used by <signjar>. Bugzilla Report 39189. * <compositemapper>'s order of results is now predictable. Bugzilla Report 44873 * a new <firstmatchmapper> has been added, which works similar to <compositemapper> but only returns the results of the first nested mapper that matches. Bugzilla Report 44873 * <get> has a new maxtime attribute that terminates downloads that are taking too long. Bugzilla Report 45181. * <ftp> now supports selectors for remote directories as well. Bugzilla Report 44726. * In some cases Ant fails to rename files if the source or target file has just recently been closed on Windows. It will now try to delete the offending file once again after giving the Java VM time to really close the file. Bugzilla Report 45960. * two new properties can be used to set the MIME-Type and charset used by MailLogger. Bugzilla Report 27211. * a new attribute of <mail> allows the task to succeed if it can reach at least one given recipient. Bugzilla Report 36446. * two new properties allow MailLogger to send a fixed text instead of the log file. Bugzilla Report 38029. * <cvsversion> is supposed to support CVSNT now. Bugzilla Report 31409. * <cvs>' port attribute should now work for all clients that use the environment variable CVS_PSERVER_PORT instead of the "official" CVS_CLIENT_PORT. Bugzilla Report 30124. * <cvsversion> now works for local repositories as well. * <cvstagdiff> has an option to ignore removed files now. Bugzilla Report 26257. * <cvs> and friends now support modules with spaces in their names via nested <module> elements. * A new attribute "ignoreEmpty" controls how <concat> deals when there are no resources to concatenate. If it is set to false, the destination file will be created regardless, which reinstates the behavior of Ant 1.7.0. Bugzilla Report 46010. * If the new remote attribute is set to true, <cvschangelog> can now work against a remote repository without any working copy. Bugzilla Report 27419. * start and end tags can now be used instead of dates in <cvschangelog>. Bugzilla Report 27419. * MailLogger and <mail> can now optionally enable support for STARTTLS. Bugzilla Report 46063. * <import> has new attributes "as" and "prefixSeparator" that can be used to control the prefix prepended to the imported targets' names. * a new task <include> provides an alternative to <import> that should be preferred when you don't want to override any targets. * delete has a new attribute removeNotFollowedSymlink. If set to true, symbolic links not followed (because followSymlinks was false or the number of symlinks was too big) will be removed. Bugzilla Report 36658. * the os and osfamily attributes of <chown>, <chgrp>, <chmod> and <attrib> can now be used to run the commands on operating systems other than their "native" environment, i.e. non-Unix or non-Windows operating systems respectively. Bugzilla Report 7624. * a new resource collection <mappedresources> generalizes the prefix and fullpath attributes of <zipfileset> to arbitrary mappers that can be applied to arbitrary resource collections. Bugzilla Report 4240. * <tarfileset> and <zipfileset> have a new attribute errorOnMissingArchive that allows "optional" filesets that don't break the build if the archive doesn't exist. Bugzilla Report 46091. * <javadoc> has new attributes that correspond to the -docfilessubdirs and -excludedocfilessubdir command line arguments. Bugzilla Report 34455. * <xslt> now fails early if a specified stylesheet doesn't exist. Bugzilla Report 34525. * <xslt> now has an option to supress transformer warnings. This option only has an effect for processors that support this feature; the "trax" processor included with Ant does support it. Bugzilla Report 18897. * <xslt> has two new attributes failOnError and failOnTransformationError that can be used to not make the build process proceed if an error occurs. Bugzilla Report 36260. * <xslt> has a new attribute failOnNoResources that can be used to make the build fail/continue if the collection of resources to transform is empty. Bugzilla Report 46274. * It is now possible to define system properties that should be set during xslt's transformation. This can be used to enable XInclude processing in Xerces, for example. Bugzilla Report 36653. * a new resource collection <archives> can be used to specify collections of ZIP and TAR archives as sources. It extracts them on the fly. This is a generalization of the <zipgroupfileset> found as nested element of <zip> and friends. Bugzilla Report 46257. * <dependset> has a new verbose attribute that makes the task list all deleted targets and give a hint as to why it deleted them. Bugzilla Report 13681. * <replaceregexp> now supports arbitrary filesystem based resource collections. Bugzilla Report 46341. * <replace> now supports arbitrary filesystem based resource collections. Bugzilla Report 24062. * token and value of <replace>'s nested <replacefilter> can now also be specified as nested elements to allow multiline content more easily. Bugzilla Report 39568. * <replace> and <replaceregexp> can now optionally preserve the file timestamp even if the file is modified. Bugzilla Report 39002. * The <replace> child-elements <replacetoken> and <replacevalue> have a new attribute that controls whether properties in nested text get expanded. Bugzilla Report 11585. * <replace> has a new attribute failOnNoReplacements that makes the build fail if the task didn't do anything. Bugzilla Report 21064. * <sync>'s <preserveInTarget> has a new attribute that controls whether empty directories should be kept. Bugzilla Report 43159. * ant -diagnostics now checks that it can read as much from the temporary directory as it has written. This may help detecting a full filesystem. Bugzilla Report 32676. * <pathconvert> has a new preserveduplicates attribute--historically these were eliminated in the interest of behaving in the manner of a "path." * <javac>'s source and target attributes are no longer ignored when using gcj. Bugzilla Issue 46617. * ant -diagnostics now outputs information about the default XSLT processor. Bugzilla Issue 46612. * the ZIP library will now ignore ZIP extra fields that don't specify a size. Bugzilla Report 42940. * CBZip2OutputStream now has a finish method separate from close. Bugzilla Report 42713. * the <zip> and <unzip> family of tasks has new options to deal with file name and comment encoding. Please see the zip tasks' documentation for details. * <input ...><handler type="secure" /></input> now uses previously undocumented SecureInputHandler shipped with Ant 1.7.1. * Command line arguments for <exec> and similar tasks can now have optional prefix and suffix attributes. Bugzilla Report 47365 * <apply>'s srcfile and targetfile child elements can now have optional prefix and suffix attributes. Bugzilla Report 45625 * <jar> has a new attribute to enable indexing of META-INF directories which is disabled for backwards compatibility reasons. Bugzilla Report 47457 * <apt>'s executable attribute can be used to specify a different executable. Bugzilla Report 46230. * <rmic>'s new executable attribute can be used to specify a different executable. Bugzilla Report 42132. * <javac>, <rmic>, <javah> and <native2ascii> now provide a nested element to specify a classpath that will be used when loading the task's (compiler) adapter class. Bugzilla Report 11143. * <javac>, <rmic>, <javah> and <native2ascii> now provide a nested element to specify the task's (compiler) adapter as an instance of a class that has been defined via typedef/componentdef. This allows more control over the classpath and allows adapters to be defined in Antlibs easily. * A new subclass org.apache.tools.ant.loader.AntClassLoader5 of AntClassLoader has been added which overrides getResources which became non-final in ClassLoader with Java5+ so this method now behaves as expected. The new subclass will be used by Ant internally if it is available and Ant is running on Java5 or more recent. Bugzilla Report 46752. * a new attributes can chose a different request method than GET for the http condition. Bugzilla Report 30244 * <splash> now supports a configurable display text and a regular expression based way to determine progress based on logged messages. Bugzilla Report 39957. * the number of retries on error in <get> is now configurable. <get> can be told to not download files that already exist locally. Bugzilla Report 40058. * Ant now builds against commons-net 2.0 as well. Bugzilla Report 47669. * A new nested element connectionProperty of <sql> allows setting of arbitrary JDBC connection properties. Bugzilla Report 33452. * A new islastmodified condition can check the last modified date of resources. * <rmic> has a new destDir attribute that allows generated files to be written to a different location than the original classes. Bugzilla Report 20699. * <rmic> has a new listfiles attribute similar to the existing one of <javac>. Bugzilla Report 24359. * It is now possible to suppress the "FAILED" lines sent to Ant's logging system via <junit>'s new logFailedTests attribute. Bugzilla Report 35073. * <propertyfile> now can delete entries. * The <resources> resource collection can now optionally cache its contents. * A new <resourceexists> condition can check whether resources exists. * <sql> has two new attributes errorproperty and warningproperty that can be set if an error/warning occurs. Bugzilla Report 38807. * <sql> has a new attribute rowcountproperty that can be used to set a property to the number of rows affected by a task execution. Bugzilla Report 40923. * when Ant copies files without filtering, it will now use NIO channels. Bugzilla Report 30094. * <get> has a new attribute that can be used to disable caching on HTTP connections at the HttpUrlConnection level. Bugzilla Report 41891. * <tar> and <zip> (and tasks derived from <zip>) will now create the parent directory of the destination archive if it doesn't exist. Bugzilla Report 45377. * A new filterreader <sortfilter> that sorts input lines has been added. Bugzilla Report 40504. * A new token filter <uniqfilter> that suppresses tokens that match their ancestor token has been added. * <rootfileset>s nested into <classfileset>s can now use a dir attribute different from the <classfileset>. Bugzilla Report 37763. * <path> can now optionally cache its contents. * <property> can now specify values as nested text. Bugzilla Report 32917. * a new parentFirst attribute on <javaresource> allows resources to be loaded from the specified classpath rather than the system classloader. Bugzilla Report 41369. * <property location="from" basedir="to" relative="true"/> can now calculate relative paths. * The <name> selector supports a new handleDirSep attribute that makes it ignore differences between / and \ separators. Bugzilla Report 47858. * <get> now supports resource collections (as long as the resources contained provide URLs) and can get multiple resources in a single task. * <import> can now import non-File resources if they provide an URL - as the <url> and <javaresource> resources do. Bugzilla Report 29251 * <import> can now import multiple resources specified as resource collections. Bugzilla Report 22269. * a new <resourcelist> type is similar to <filelist> but can read the list of resources from non-file resources and may return resources that are not files. * a new filterreader appendtolines complements prefixlines. * a new top level element extension-point allows build files to be extended with custom targets more easily.