ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Basin Ilya <>
Subject overriding built-in tasks (not targets)
Date Sun, 14 Apr 2019 11:10:08 GMT

My IDE generates an Ant script with the run-deploy and run-undeploy targets. They internally
use the standard <get> task, but they don't check the outcome and sometimes return false

The build is customizable by editing the file build.xml that includes this generated project
file. I want to replace <get> with a macro that additionally greps the http response
body for the success message.

The main problem is: when the macro tries to call the real <get>, it either fails with
a stack overflow or with the message: "antcall task calling its own parent target". I thought
I could fix it with name spaces, but it was too complex for me. My current workaround is to
re-import with a different task name.

There are some other issues with overriding <get> with a macrodef: the generated script
calls get either with or without a password, but a macro cannot pass unknown attributes to
the wrapped tasks. On the other hand, <presetdef> can pass them, but it won't let me
add the additional checker task.
Macro attributes with default values don't work for the the "password" property of <get>,
because null and empty string treated differently. There's no way to avoid calling the property
setter, if the property has a default value in the macro instance. My workaround is to have
two <real-get> elements in the custom script: with and without the password.

This leads to another problem: to invoke one of the <real-get> tasks conditionally I
have to use <antcall> and because of that I can't support the optional children elements
of <get>.

	<?xml version="1.0" encoding="utf-8"?>
	<project default="build" >
		<taskdef name="real-get" classname="" />
		<macrodef name="get">
			<attribute name="src"/>
			<attribute name="dest"/>
			<attribute name="username" default="NOT-SET" />
			<attribute name="password" default="NOT-SET" />
				<condition property="">
						<equals arg1="@{username}" arg2="NOT-SET"/>
						<equals arg1="@{password}" arg2="NOT-SET"/>
				<property name="mymacro.src" value="@{src}"/>
				<property name="mymacro.dest" value="@{dest}"/>
				<property name="mymacro.username" value="@{username}"/>
				<property name="mymacro.password" value="@{password}"/>
				<antcall target="-get-without-creds"/>
				<antcall target="-get-with-creds"/>
				TODO: check download result and optionally fail
				<echo message="some additional check"/>
		<target name="-get-without-creds" if="">
			<real-get src="${mymacro.src}" dest="${mymacro.dest}" />
		<target name="-get-with-creds" unless="">
			<real-get src="${mymacro.src}" dest="${mymacro.dest}" username="${mymacro.username}"
password="${mymacro.password}" />
		<target name="build">
			<get src="" dest="out.html"/>

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message