1
我目前從ant調用java任務。我也從java調用ant目標本身。所以工作流是java->使用ant庫 - >運行ant target - >調用java任務。重定向從螞蟻調用的Java任務中的日誌?
除了從java任務內部打印的日誌出現在控制檯中,並且不屬於ant中的DefaultLogger類的一部分之外,這是非常完美的。
這裏是我使用的代碼: 的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>
這是Java類我寫道:
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());
}
}
}
}
這裏是控制檯輸出:
運行:
消息:內部運行目標
Hello World
完成!
通常我需要在控制檯輸出出現這樣的:
運行:
消息:運行目標內
mesage:的Hello World
完成!