2011-01-12 14 views
19

Jak zainstalować antlib.xml dla scala, aby mrówka działała?skonfiguruj mrówkę dla scala

W tej chwili napotkam następujący błąd podczas uruchamiania ant w pliku build.xml, który zawiera zadania scala.

[taskdef] Could not load definitions from resource scala/tools/ant/antlib.xml. It could not be found. 
/scalala/scalala-read-only/scalala/build.xml:36: Problem: failed to create task or type scalac 

Cause: The name is undefined. 
Action: Check the spelling. 
Action: Check that any custom tasks/types have been declared. 
Action: Check that any <presetdef>/<macrodef> declarations have taken place. 

Mam unjarred się scala-2.8.1.final/lib/scala-compiler.jar ale nie wiem gdzie umieścić zawartość.

Oto odpowiedni fragment kodu mrówka z build.xml:

<target name="compile" depends=""> 
    <mkdir dir="${build.dir}"/> 

    <scalac srcdir="${src.dir}" destdir="${build.dir}" 
      classpathref="project.classpath" force="changed"> 
      <!-- addparams="-Yclosure-elim -optimise" --> 
     <include name="**/*.scala"/> 
    </scalac> 
    </target> 

Odpowiedź

Poniższy kod jest ważne, aby mieć w pliku build.xml:

<!-- Define project CLASSPATH. --> 
    <path id="project.classpath"> 
    <pathelement location="${build.dir}" /> 

    <fileset dir="${env.SCALA_HOME}/lib/"> <include name="*.jar" /> </fileset> 

    <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> 
    </path> 

    <!-- Define scala compiler, scaladoc, etc command --> 
    <taskdef resource="scala/tools/ant/antlib.xml"> 
    <classpath> 
     <pathelement location="${env.SCALA_HOME}/lib/scala-compiler.jar" /> 
     <pathelement location="${env.SCALA_HOME}/lib/scala-library.jar" /> 
    </classpath> 
    </taskdef> 

Mój problem polegał na tym, że zmienna środowiskowa $SCALA_HOME (${env.SCALA_HOME}) wskazywała na złą miejsce (jeden poziom za głęboki: /usr/local/scala-2.8.1.final/bin/ zamiast tylko /usr/local/scala-2.8.1.final/, a zatem nie można znaleźć katalogu lib.

+0

Być może powinieneś opublikować odpowiedni fragment kodu ant. Być może nie masz typedef dla skalaka w twoim build.xml – Raghuram

Odpowiedz

20

Plik antlib.xml znajduje się w pliku scala-compiler.jar. Musisz umieścić go w swojej ścieżce klas. Aby zdefiniować scalac ant zadania, umieścić następującą definicję w swoim mrówek pliku kompilacji (jest to brane formularz http://www.scala-lang.org/node/98):

<target name="init"> 
    <property 
    name="scala-library.jar" 
    value="${scala.home}/lib/scala-library.jar" 
    /> 
    <path id="build.classpath"> 
    <pathelement location="${scala-library.jar}" /> 
    <!--<pathelement location="${your.path}" />--> 
    <pathelement location="${build.dir}" /> 
    </path> 
    <taskdef resource="scala/tools/ant/antlib.xml"> 
    <classpath> 
     <pathelement location="${scala.home}/lib/scala-compiler.jar" /> 
     <!-- NEW: For scala 2.10.2 you need scala-reflect: --> 
     <pathelement location="${scala.home}/lib/scala-reflect.jar" /> 
     <pathelement location="${scala-library.jar}" /> 
    </classpath> 
    </taskdef> 
</target> 

aby użyć zadania scalac, dodać atrybut depends="init" do swojego zadania, na przykład

<target name="compile" depends="init"> 
    <mkdir dir="${build.dir}"/> 

    <scalac srcdir="${src.dir}" destdir="${build.dir}" 
      classpathref="project.classpath" force="changed"> 
      <!-- addparams="-Yclosure-elim -optimise" --> 
    <include name="**/*.scala"/> 
    </scalac> 
</target> 

Mam nadzieję, że pomaga.

+5

Musiałem dodać to przed linią scala-compiler.jar: ' ' (przy użyciu Scala 2.10 RC2). wcześniej dostałem ten błąd: 'Klasa wymagana przez klasę scala.tools.ant.FastScalac nie można znaleźć: scala/reflect/internal/settings/MutableSettings $ Ustawianie wartości przy użyciu programu ładującego klasy AntClassLoader' –

+1

Podczas instalacji scala za pomocą Brew, możesz trzeba zmienić/lib/na/libexec/lib / –

Powiązane problemy