私は現在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
はやりました!