最近ScalaファイルのコンパイルをAntを利用して行うようにしたので、その方法をメモしておきます。
- Scalaコンパイル用タスクの設定 Scalaコンパイル用タスクは scala-compiler.jar の中の scala/tools/ant/antlib.xml で定義されています。
<property name="scala.home" location="C:\scala-2.9.0.1" /> <property name="scala-library.jar" value="${scala.home}/lib/scala-library.jar" /> <property name="scala-dbc.jar" value="${scala.home}/lib/scala-dbc.jar" /> <property name="scala-swing.jar" value="${scala.home}/lib/scala-swing.jar" /> <taskdef resource="scala/tools/ant/antlib.xml"> <classpath> <pathelement location="${scala.home}/lib/scala-compiler.jar" /> <pathelement location="${scala-library.jar}" /> <pathelement location="${scala-dbc.jar}" /> <pathelement location="${scala-swing.jar}" /> </classpath> </taskdef>
とすれば設定できます。
scala-dbc.jar と scala-swing.jar はそれぞれDBアクセス、Swingを利用しなければ不要です。 - ターゲットの作成 上記によって、利用できるようになるコンパイル用のタスクは scalac と fsc の2種類になります。
scalacはjavacと同じ感覚で利用することができます。<target name="build" depends="init"> <mkdir dir="${build.dir}" /> <scalac srcdir="${sources.dir}" destdir="${build.dir}" classpathref="build.classpath" /> </target>
fscは少しコツのようなものがあって、普通に<target name="build" depends="init"> <mkdir dir="${build.dir}" /> <fsc srcdir="${sources.dir}" destdir="${build.dir}" classpathref="build.classpath" /> </target>
とすると、コンパイルが成功しているにも関わらず
「Compile failed because of an internal compiler error」
が表示され、エラーとなってしまいます。
ちょっと理由はわからないのですが、これは「failonerror」属性を「false」に変更することで防ぐことができます。<target name="build" depends="init"> <mkdir dir="${build.dir}" /> <fsc srcdir="${sources.dir}" destdir="${build.dir}" faileonerror="false" classpathref="build.classpath" /> </target>
全てまとめるとこんな感じになります。
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstScala" default="compile" basedir="." > <description> simple example build file </description> <!-- set global properties for this build --> <property name="src" location="src" /> <property name="build" location="build" /> <property name="dist" location="dist" /> <property name="scala.home" location="C:\scala-2.9.0.1" /> <target name="init"> <property name="scala-library.jar" value="${scala.home}/lib/scala-library.jar" /> <property name="scala-dbc.jar" value="${scala.home}/lib/scala-dbc.jar" /> <property name="scala-swing.jar" value="${scala.home}/lib/scala-swing.jar" /> <path id="build.classpath"> <pathelement location="${scala-library.jar}" /> <pathelement location="${scala-dbc.jar}" /> <pathelement location="${scala-swing.jar}" /> <pathelement location="${scala.home}/lib/scala-compiler.jar" /> <pathelement location="${build}" /> </path> <taskdef resource="scala/tools/ant/antlib.xml"> <classpath> <pathelement location="${scala.home}/lib/scala-compiler.jar" /> <pathelement location="${scala-library.jar}" /> <pathelement location="${scala-dbc.jar}" /> <pathelement location="${scala-swing.jar}" /> </classpath> </taskdef> </target> <target name="compile" depends="init" description="compile the source"> <!-- Compile the java code from ${src} into ${build} --> <fsc srcdir="${src}" encoding="UTF-8" destdir="${build}" deprecation="on" failonerror="false" classpathref="build.classpath"/> </target> </project>
0 件のコメント:
コメントを投稿