Top / Java / Ant / Javaから実行する

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

環境設定

  • Apache Ant version 1.7.0 compiled on September 23 2007

で確認しました。またあらかじめ、

ant.jar
ant-launcher.jar

にクラスパスを通しておきます。

pic.png

やってみる

  • サンプルの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

変数の制御

変数については外部からプロパティで渡すことが可能

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

実行結果

target1:
    [echo] target1です
    [echo] メッセージ1

複数のターゲットを実行

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

関連リンク


この記事は

選択肢 投票
おもしろかった 13  
そうでもない 0  

Top / Java / Ant / Javaから実行する

現在のアクセス:11771


添付ファイル: filepic.png 459件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-10-19 (木) 15:39:43 (30d)