// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。

#contents

AntをJavaプログラムから呼び出す方法を調べました。Antつかったプログラムを書きたいときに重宝します。


**環境設定 [#nd4fef87]
-Apache Ant version 1.7.0 compiled on September 23 2007

で確認しました。またあらかじめ、
 ant.jar
 ant-launcher.jar
にクラスパスを通しておきます。

#ref(pic.png)

**やってみる [#qa368ebc]
-サンプルのbuild.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <project name="project" default="target1">
   <property file="build.win.properties" />
 
   <target name="target1">
     <echo message="target1です" />
     <echo message="${target1.msg}" />
   </target>
 
   <target name="target2">
     <echo message="target2" />
     <echo message="${target2.msg}" />
   </target>
 </project>


-ソース
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
 
 import org.apache.tools.ant.BuildLogger;
 import org.apache.tools.ant.DefaultLogger;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.ProjectHelper;
 
 // 作成日: 2008/01/04
 public class Main {
   public static void main(String[] args) {
     try {
       Project project = new Project();
       project.init();
 
       // ビルドファイルを指定
       File buildFile = getBuildFile();
       ProjectHelper.getProjectHelper().parse(project, buildFile);
 
       // loggerの設定。
       BuildLogger buildLogger = getBuildLogger();
       project.addBuildListener(buildLogger);
 
       // Vector list = new Vector();
       // list.add(project.getDefaultTarget());
       // project.executeTargets(new Vector(list));
       project.executeTarget(project.getDefaultTarget());
 
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 
   private static BuildLogger getBuildLogger() {
     BuildLogger buildLogger = new DefaultLogger();
     buildLogger.setMessageOutputLevel(Project.MSG_INFO);
     buildLogger.setOutputPrintStream(new PrintStream(System.out));
     buildLogger.setErrorPrintStream(new PrintStream(System.err));
     buildLogger.setEmacsMode(false);
     return buildLogger;
   }
 
   private static File getBuildFile() throws IOException {
     return new File("build.xml");
   }
 
 }

実行結果
 target1:
     [echo] target1です
     [echo] ${target1.msg}


**TIPS [#l3533606]
***変数の制御 [#b6c3642d]
変数については外部からプロパティで渡すことが可能

  Project project = new Project();
  〜 省略 〜
  project.setNewProperty("target1.msg", "メッセージ1");
  project.executeTarget(project.getDefaultTarget());

実行結果
 target1:
     [echo] target1です
     [echo] メッセージ1




***複数のターゲットを実行 [#e4e72e82]

 Project project = new Project();
  〜 省略 〜
 project.setNewProperty("target1.msg", "メッセージ1");
 project.setNewProperty("target2.msg", "メッセージ2");
 
 Vector list = new Vector();
 list.add("target1");
 list.add("target2");
 project.executeTargets(list);
 // project.executeTarget(project.getDefaultTarget());

実行結果
 target1:
     [echo] target1です
     [echo] メッセージ1
 
 target2:
     [echo] target2
     [echo] メッセージ2




***関連リンク [#u4657dba]
-http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16992&forum=12



----
この記事は
#vote(おもしろかった[11],そうでもない[0])
#vote(おもしろかった[12],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS