从ant调用的Java Task重定向日志?

时间:2017-08-16 06:02:16

标签: java ant task

我目前正在从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
完成了!

1 个答案:

答案 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>