Index > groovy と java を混ぜた状態でビルドする build.xml の記述方法(Ant)
Thu, April 8, 2010

groovy と java を混ぜた状態でビルドする build.xml の記述方法(Ant)

参考情報

GroovyとJavaを混ぜて使うときに常々ビルドが面倒だと思っていたのですが、 groovyc には -j ( ジョイントコンパイラフラグ ) オプションがあり これを使えば、groovy と java が混じっていても問題なくコンパイルできる。

いままでは、ベースクラスは java で書いて、派生クラスは groovy で 実装して・・・みたいなことを律儀にやって、javac してから groovyc するように していたのだが、そういう細かいことを一切考える必要がないことが判明。

groovyc の例

$ mkdir -p bin
$ groovyc --sourcepath=src --classpath=lib/foo.jar -d bin `find ./src -name "*.groovy"` `find ./src -name "*.java"` -j 

Ant の例

全体

<?xml version="1.0" encoding="UTF-8"?>
<project default="jar">

     <property environment="env" />

     <path id="groovy.classpath"> <fileset dir="${env.GROOVY_HOME}/embeddable/" /> </path>
     <taskdef
        name         = "groovyc"
        classname    = "org.codehaus.groovy.ant.Groovyc"
        classpathref = "groovy.classpath" /> 

    <target name="init">
        <property name="version" value="1.0"/>
        <property name="name" value="test-${version}"/>

        <property name="build.src" value="./src"/>
        <property name="build.dest" value="./bin"/>
        <property name="build.jar" value="${name}.jar"/>
        <property name="libdir" value="./lib"/>


        <path id="compile.class.path">
            <fileset dir="${libdir}" includes="*.jar" />
            <fileset dir="${env.GROOVY_HOME}/lib/" />
            <!--
            <fileset dir="${env.GROOVY_HOME}/embeddable/" />
            -->
        </path>
    </target>

    <target name="clean" depends="init">
        <delete dir="${build.dest}" />
        <delete file="${build.jar}" />
    </target>

    <target name="jar" depends="compile">
        <jar destfile="${build.jar}">
            <zipfileset dir="${build.dest}" />
        </jar>
    </target>

    <target name="compile"  depends="init" description = "compile groovy to bytecode">
        <mkdir dir="${build.dest}" />
        <groovyc
            encoding="UTF-8"  
            srcdir="${build.src}" 
            destdir="${build.dest}" 
            classpathref = "compile.class.path" >

            <javac >
                    <classpath refid="compile.class.path"/>
                <include name="**/*.java" />
            </javac>
        </groovyc>
    </target>
</project>

ポイントのみ抜き出し

     <property environment="env" />

     <path id="groovy.classpath"> <fileset dir="${env.GROOVY_HOME}/embeddable/" /> </path>
     <taskdef
        name         = "groovyc"
        classname    = "org.codehaus.groovy.ant.Groovyc"
        classpathref = "groovy.classpath" /> 


    <target name="compile"  depends="init" description = "compile groovy to bytecode">
        <mkdir dir="${build.dest}" />
        <groovyc
            encoding="UTF-8"  
            srcdir="${build.src}" 
            destdir="${build.dest}" 
            classpathref = "compile.class.path" >

            <javac >
                    <classpath refid="compile.class.path"/>
                <include name="**/*.java" />
            </javac>
        </groovyc>
    </target>
 Twitter
follow me on Twitter
 Categories