2011-01-12 13 views
19

¿Cómo instalo el antlib.xml para que scala funcione correctamente?configurar hormiga para scala

En este momento me aparece el siguiente error cuando ejecuto ant en un archivo build.xml que contiene tareas 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. 

He unjarred la scala-2.8.1.final/lib/scala-compiler.jar pero no sé dónde poner el contenido.

Aquí está el correspondiente fragmento de código de la hormiga 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> 

respuesta

El siguiente código es importante tener en su archivo 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> 

Mi problema era que la variable de entorno $SCALA_HOME (${env.SCALA_HOME}) estaba apuntando a un error lugar (un nivel demasiado profundo: /usr/local/scala-2.8.1.final/bin/ en lugar de solo /usr/local/scala-2.8.1.final/, y por lo tanto, el directorio lib no se pudo encontrar.

+0

Quizás deba publicar el fragmento de código ant correspondiente. Quizás no tengas un typedef para scalac en tu build.xml – Raghuram

Respuesta

20

El archivo antlib.xml se encuentra en scala-compiler.jar. Tienes que ponerlo en tu classpath. Para definir la tarea ant scalac, poner la siguiente definición en su archivo ant build (esto es tomado 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> 

utilizar la tarea scalac, agregue el atributo depends="init" a su tarea, por ejemplo,

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

Espero que eso ayude.

+5

Tuve que agregar esto antes de la línea scala-compiler.jar: ' ' (Usando Scala 2.10 RC2). antes de eso, recibí este error: 'No se encuentra una clase requerida por la clase scala.tools.ant.FastScalac: scala/reflect/internal/settings/MutableSettings $ SettingValue usando el cargador de clases AntClassLoader' –

+1

Al instalar Scala usando Brew, puede necesita cambiar/lib/to/libexec/lib / –

Cuestiones relacionadas