[Yanel-dev] exception handling in Ant tasks
Guillaume Déflache
guillaume.deflache at wyona.com
Mon Apr 12 09:25:54 CEST 2010
Michael Wechner schrieb:
> Guillaume Déflache wrote:
>> Could we stop logging exceptions in Ant tasks and simply rethrow them
>> as build exceptions (org.apache.tools.ant.BuildException).
>> The Ant tasks's "execute" entry-point method that every task shall
>> implement already throws this type of exception so by only
>> (re)throwing it here and in other methods:
>> - the stacktraces are simpler because they don't get displayed and/or
>> wrapped many times
>> - one does not litter one's code with a lot of exception handling, the
>> only needed code is "throws BuildException" appended on all methods
>> signatures, or even "throws Exception" with only a exception wrapper
>> from Exception to BuildException on the "execute" method
>> - errors ultimately get catched by Ant anyway, which already does a
>> great job at showing full stacktraces, *and failing the whole build*
>>
>>
>> I am asking because I spent quite some time wondering why my
>> resource-type was not found, it was only because my project's
>> resource-types.xml was not well-formed and it just got ignored because
>> of these issues (culprit here being Yanel's
>> src/build/java/org/wyona/yanel/ant/MergeResourceTypesConfigsTask.java)...
>>
>> Better fail fast than silently!!!
>
> I understand your frustration, but you need to be more specific by
> providing a patch of the MergeResourceTypesConfigsTask class
Shall I do that now?
The modification is pretty systematic as I tried to explain: remove all
"try { ...} catch" constructs and make all methods throws Exception.
Only the 'execute' method's contract will only allow BuildException to
be thrown so wrap Exception to BuildException there.
> re which errors you want to throw and give specific examples when these
> errors are thrown, e.g. resource-types.xml is not well-formed.
I already gave an example:
make your realm's resource-types.xml not well-formed => the build will
not break
Sadly you cannot provide an example log since AFAICS the errors do not
show up on the console, at least not at the log level I usually run Ant
(with ANT_ARGS=-q).
Where are the log4j logs supposed to be written to in this case? I am
not sure which log4j properties file gets read here.
> The case that your resource-types.xml is not found is NOT a build error,
> because a realm does not have to have such a file.
It was a misformulation from my side, I should have written
"spent quite some time wondering why my resource-type was not taken into
account" instead of "spent quite some time wondering why my
resource-type was not found".
I am aware this file is not mandatory.
> That's rather a matter of documentation. Also you could enhance this
> documentation, e.g.
>
> http://www.yanel.org/en/documentation/configuration/resource-types_xml.html
> http://www.yanel.org/en/documentation/create-new-resource.html
We certainly could expand
http://www.yanel.org/en/documentation/configuration/resource-types_xml.html
with a rationale for the example and at
$YANELHOME/conf/local/local.resource-type.xml in the "Register New
Resource" section suggest to use $REALM_DIR/resource-types.xml instead
of $YANEL_HOME/conf/local/local.resource-types.xml
Should I do that now?
More information about the Yanel-development
mailing list