2017-08-16 5 views
1

私は現在antからjavaタスクを呼び出しています。私はまた、Javaからantターゲット自体を呼び出しています。したがって、ワークフローはjava - > antライブラリを使用 - > ant target - > java taskを呼び出します。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
完了!

通常、私はこのように表示されるようにコンソール出力を必要とする:

実行:
メッセージ:実行ターゲット内部
メッセージを指定:のHello World
はやりました!

答えて

0

一日中掘り起こした後、私は自分自身で解決策を見つけました。 javaの代わりにexecの代わりにbuild.xmlファイルを変更しました。

<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> 
関連する問題