I am currently invoking a java task from ant. I am also invoking the ant target itself from java. So the workflow is java -> use ant library -> run ant target -> call java task.
This is working perfectly except that the logs printed from inside the java task are appearing in the console and are not part of the DefaultLogger class in ant.
Here is the code I am using: build.xml
<project>
<target name="run">
<echo message="inside run target"/>
<java classname="oata.HelloWorld" failonerror="true">
<classpath>
<pathelement location="hello.jar"/>
</classpath>
</java>
</target>
</project>
This is the Java class I wrote:
package com.test;
import java.io.File;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
public class Test
{
public static void main(String[] args)
{
new Test().run();
}
public void run()
{
File buildFile = new File("C:\\TEMP\\build.xml");
Project p = new Project();
MyLogger consoleLogger = new MyLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
p.executeTarget("run");
System.out.println("done!");
}
class MyLogger extends DefaultLogger
{
@Override
public void messageLogged(BuildEvent event)
{
int priority = event.getPriority();
// Filter out messages based on priority
if (priority <= msgOutputLevel)
{
System.out.println("message: " + event.getMessage());
}
}
}
}
Here is the console output:
run:
message: inside run target
Hello World
done!
Typically I need the console output to appear like this:
run:
message: inside run target
mesage: Hello World
done!