ant capture task console output stdout stderr javac jspc "Problems opening file using a recorder entry" absolute path
Problem:
Many tasks include options to capture output. Each of them different, such as exec - with the redirector option; java - with the
@output
attribute. What if you want to capture the output (stderr and stdout) from a task that doesn't support output capture (such as javac
) or you'd like more control - start|stop|start appending output from many commands to shared file(s)?Solution:
Record is the solution. Just BEWARE the
@name
attribute is treated as plain file path rather than a File attribute as in many other ant tasks. This means if supplied with a relative path it will be relative to where you're running ant from - a problem if you have ant scripts invoking other ant scripts. When path issues occur, you'll get this error:Problems opening file using a recorder entry
Run ant with the
-v
option to get the full stack trace of the IOException
. You'll see what path it's attempted - and failed - to use.ALWAYS use absolute paths and you'll (hopefully) be fine.
To start recording:
<!-- (1) guarantee that you have an absolute path to the log file by setting a property with @location as the relative reference --> <property name="build.logpath" location="${a.build.location}/sub_folder/log_file.log"/> <!-- (2) start recording --> <record action="start" name="${build.logpath}" loglevel="verbose"/>
All tasks that follow will have the console output (and logging if you set the loglevel attribute) go to the capture file:
<jasper2 ... /> <javac ... /> etc.
Then to stop:
<record action="stop" name="${build.logpath}"/>
Easy as that.