2011-01-12 24 views
19

Come si installa antlib.xml per scala per far funzionare la formica?configure ant per scala

In questo momento ho riscontrato il seguente errore quando eseguo ant in un file build.xml che contiene attività 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. 

ho unjarred il scala-2.8.1.final/lib/scala-compiler.jar, ma non so dove mettere il contenuto.

Ecco il corrispondente frammento di codice formica dal 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> 

risposta

Il seguente codice è importante avere nel file 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> 

il mio problema era che la variabile $SCALA_HOME ambiente (${env.SCALA_HOME}) indicava il male posto (un livello troppo profondo: /usr/local/scala-2.8.1.final/bin/ anziché solo /usr/local/scala-2.8.1.final/ e pertanto non è stato possibile trovare la directory lib.

+0

Forse dovresti pubblicare lo snippet di codice della form pertinente. Forse non si dispone di un typedef per scalac nel build.xml – Raghuram

risposta

20

L'antlib.xml è contenuta nella scala-compiler.jar. Devi metterlo nel tuo classpath. Per definire il compito formica scalac, mettere la seguente definizione nel file Ant (questo è preso forma 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> 

Per utilizzare l'attività scalac, aggiungere l'attributo depends="init" per il vostro compito, per esempio

<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> 

Spero che sia d'aiuto.

+5

ho dovuto aggiungere questo prima che la scala-compiler.jar linea: ' ' (Utilizzo di Scala 2.10 RC2). Prima che ho ottenuto questo errore: 'Una classe necessaria per classe scala.tools.ant.FastScalac non può essere trovato: Scala/riflettere/interno/Impostazioni/MutableSettings $ SettingValue utilizzando il programma di caricamento classe AntClassLoader' –

+1

Quando si installa Scala utilizza Brew, si può bisogno di cambiare/lib/in/libexec/lib / –