从 ant 调用的 Java 任务重定向日志?
Redirect the logs from a Java Task invoked from ant?
我目前正在从 ant 调用 java 任务。我还从 java 调用了 ant 目标本身。所以工作流程是 java -> 使用 ant 库 -> 运行 ant 目标 -> 调用 java 任务。
除了从 java 任务内部打印的日志出现在控制台中并且不是 ant 中的 DefaultLogger class 的一部分之外,这工作得很好。
这是我使用的代码:
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>
这是Javaclass我写的:
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());
}
}
}
}
控制台输出如下:
运行:
消息:内部 运行 目标
你好世界
完成!
通常我需要控制台输出如下所示:
运行:
消息:内部 运行 目标
消息:你好世界
完成!
经过一整天的挖掘,我自己找到了解决方案。我刚刚在 build.xml 文件中更改为使用 exec 而不是 java,如下所示:
<target name="run2" description="runs my class">
<echo message="inside run 2 target"/>
<exec executable="java">
<arg line="-classpath hello.jar com.HelloWorld"/>
</exec>
</target>
我目前正在从 ant 调用 java 任务。我还从 java 调用了 ant 目标本身。所以工作流程是 java -> 使用 ant 库 -> 运行 ant 目标 -> 调用 java 任务。
除了从 java 任务内部打印的日志出现在控制台中并且不是 ant 中的 DefaultLogger class 的一部分之外,这工作得很好。
这是我使用的代码: 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>
这是Javaclass我写的:
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());
}
}
}
}
控制台输出如下:
运行:
消息:内部 运行 目标
你好世界
完成!
通常我需要控制台输出如下所示:
运行:
消息:内部 运行 目标
消息:你好世界
完成!
经过一整天的挖掘,我自己找到了解决方案。我刚刚在 build.xml 文件中更改为使用 exec 而不是 java,如下所示:
<target name="run2" description="runs my class">
<echo message="inside run 2 target"/>
<exec executable="java">
<arg line="-classpath hello.jar com.HelloWorld"/>
</exec>
</target>