我目前正在从ant调用java任务。我也是从java调用ant目标本身。所以工作流程是java - >使用ant库 - >运行蚂蚁目标 - >调用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
完成了!
答案 0 :(得分:0)
经过一整天的挖掘,我自己找到了解决方案。我刚刚在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>