2012年10月29日月曜日

Gradleからbuild.xmlのAnt targetを呼び出す

Gradleでは、build.xmlに定義されたAntのターゲットをGradleのタスクとして実行できる。

例えば、以下のようなAntのbuild.xmlがあるとする。
<project basedir="." default="hello">
    <target name="hello">
        <echo>hello</echo>
    </target>
</project>
このbuild.xmlをGradleにインポートする。具体的には、build.gradleに以下のように記述する。
ant.importBuild 'build.xml'
これにより、GradleのhelloタスクとしてAntのhelloターゲットを実行することができる。

ただし、build.gradleにhelloタスクがすでに存在する場合、タスク名が衝突してしまう。この場合、以下のようなAntのビルドファイル(ファイル名は任意、ここではwrapper.xmlとする)を用意する。
<project default="">
    <include file="build.xml" as="antwrapper" />
</project>
このビルドファイルをbuild.gradleにインポートする。
ant.importBuild 'wrapper.xml'
これにより、AntのhelloターゲットをGradleのantwrapper.helloタスクとして実行できる。

2 件のコメント:

  1. 質問させて頂きたいのですが
    build.xml上でプロパティファイル等を設定している場合正常に動かせませんでした。

    def antFile = new File("./build.xml")
    def project = new Project()
    project.init()
    ProjectHelper.configureProject(project, antFile);
    project.executeTargets(['clean', 'debug'] as Vector)

    な記述で回避しましたが、gradleだとどう書けばよいのでしょう?
    <使ったのはandroidのbuild.xmlです

    返信削除
    返信
    1. えらそーにblog書いてますが、最近gradleを始めたばかりで、実はよくわかってません(汗)。コメントの内容から判断してkimukouさんのほうがgradleにお詳しいかと。

      androidも門外漢ですが、とりあえずSDKをダウンロードして、android create projectで作成されたbuild.xmlをもとに試したところ:-code-genタスクでエラーになりました。ただ、これがgradleからantを呼ぶことに起因する問題なのかは、判断できませんでした。

      簡単にWeb検索した限りでは、gradle-android-pluginというgradle pluginを使ったビルドの例(http://d.hatena.ne.jp/waman/20110303/1299103140) がありましたが、エントリ中にkimukouさんらしきidがあったので、既知の情報かと思います。

      ということで、お役に立てず、すみません。

      削除