2016-10-22 5 views
1

JavaからAntターゲットを実行して、ディレクトリを基準で検索しようとしています。コンソールからsearchDirectoriesを実行すると、Javaクラスからディレクトリが見つからない場合、結果はOKです。Ant:JavaからAntを実行する方法

File buildFile = new File("build.xml"); 

Project p = new Project(); 
p.setUserProperty("ant.file", buildFile.getAbsolutePath()); 
p.init(); 
ProjectHelper helper = ProjectHelper.getProjectHelper(); 
DefaultLogger consoleLogger = new DefaultLogger(); 
consoleLogger.setErrorPrintStream(System.err); 
consoleLogger.setOutputPrintStream(System.out); 
consoleLogger.setMessageOutputLevel(Project.MSG_INFO); 
p.addBuildListener(consoleLogger); 
p.addReference("ant.projectHelper", helper); 
helper.parse(p, buildFile); 

try { 
    p.fireBuildStarted(); 
    p.fireSubBuildStarted(); 
    p.executeTarget("searchDirectories"); 
} catch (IOException e) { 
    p.fireBuildFinished(e); 
} 

編集:私はのbuild.xmlが含まれているディレクトリからのAntを呼び出す場合、ディレクトリが検索されます。さもなければ、この行を介してantが実行されると、結果は正しくありません。

ant -buildfile D:\Projects\antproj searchDirectories 

問題は何かわかりません。

+0

['Runtime#exec(String)'](https://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#exec-java.lang.String- )?シェルで使用するのと同じコマンドを実行することができます。 – beatngu13

+0

beatngu13、とにかく動作しません –

答えて

1

あなたは(-buildfile-fileまたは-fと同じであることに注意)、JavaからのAntを実行すると、以下のようにSystem.outに出力を印刷できます。

ProcessBuilder builder = new ProcessBuilder("ant", "-f", "/path/to/build.xml", "searchDirectories"); 
Process process = builder.start(); 

try (BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()))) { 
    out.lines().collect(Collectors.toList()).forEach(System.out::println); 
} 

あなたsearchDirectoriesタスクは多分<target>対応する、間違った結果を生成する場合バグがあります。

関連する問題