When invoking a javac task through a foreach task the
javac output is reported as coming from foreach instead
of javac.
Also if the javac is done within a <record> block that
compile output is not sent to the record log.
Attached is a sample build.xml and .java file that
illustrate the problem.
The output I get from it is as follows:
Buildfile: build.xml
init:
test:
_local:
[echo] Testing local echo
[javac] Compiling 1 source file to
D:\Meagher\Projects\metamorph\test\ant
[foreach]
D:\Meagher\Projects\metamorph\test\ant\Test.java:3:
invalid method declaration; return type required
[foreach] public static main( String args[] )
[foreach] ^
[foreach]
D:\Meagher\Projects\metamorph\test\ant\Test.java:6:
cannot resolve symbol
[foreach] symbol : variable outttt
[foreach] location: class java.lang.System
[foreach] System.outttt.println( "Hello World" );
[foreach] ^
[foreach] 2 errors
[javac] Compile failed; see the compiler error
output for details.
BUILD SUCCESSFUL
Total time: 1 second
I expected the [foreach] to instead be [javac]. And
the only thing logged to the file is:
[echo] Testing local echo
[javac] Compiling 1 source file to
D:\Meagher\Projects\metamorph\test\ant
[javac] Compile failed; see the compiler error
output for details.
File showing the problem.
Logged In: YES
user_id=521186
Oops, the file didn't attach before.
Logged In: YES
user_id=521186
Oops. Attached the wrong jar file
The real file showing the problem
Logged In: YES
user_id=521186
Upon further investigation into this I found the problem is
the handleOutput and handleErrorOutput that the ForEach task
is inheriting from Task.
It looks like Ant had the same problem in the CallTarget
class (see its overrided handle...Output methods. The
problem with the ForEach task is that the CallTarget left
the handle methods a protected so they can't be invoked the
same way as is done with the callee object in the
CallTarget class.
I've added a patch for the ForEach task that will work after
the handle methods in CallTarget are made public.
Patch:
http://sourceforge.net/tracker/index.php?func=detail&aid=677682&group_id=36177&atid=416922
Logged In: YES
user_id=521186
I submitted a request via ant's bugzilla to make the change
required in Ant.
http://issues.apache.org/bugzilla/show_bug.cgi?id=16618
Logged In: YES
user_id=521186
Update: The Ant code was changed to make the needed methods
public. The change will be available in 1.5.2.
Logged In: YES
user_id=83032
The requested changes have been made to the ForEach task.
Logged In: YES
user_id=83032
forgot to mention the changed file:
net/sf/antcontrib/logic/ForEach.jvaa