2017-08-16 70 views
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
完成!

回答

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>