2011-01-12 16 views
19

Ant çalışanı almak için antlib.xml scala'yı nasıl yüklerim?scala için anticeyi yapılandır

Şu anda scala görevlerini içeren bir build.xml dosyasında ant çalıştırdığımda aşağıdaki hatayı yaşıyorum.

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

Ben scala-2.8.1.final/lib/scala-compiler.jar unjarred ama ben içeriğini koymak için nerede bilmiyorum.

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

Aşağıdaki kod Build.xml dosyasında olması önemlidir

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

Cevap: İşte

build.xml karşılık gelen karınca kod parçacığı olduğunu

Sorunum, $SCALA_HOME ortam değişkeninin (${env.SCALA_HOME}) yanlış olduğunu gösteriyordu (bir seviye çok derin: /usr/local/scala-2.8.1.final/bin/ yerine sadece /usr/local/scala-2.8.1.final/) ve bu nedenle lib dizini bulunamadı.

+0

Belki de ilgili karınca kod snippet'ini göndermelisiniz. Belki de build.xml – Raghuram

cevap

20

Antlib.xml, scala-compiler.jar dosyasında bulunur. Onu dersine koymalısın. scalac karınca Görev tanımlamak için (bu formu http://www.scala-lang.org/node/98 alınır) sizin ant inşa dosyasına şu tanımı koyun:

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

senin görevin, örn niteliğini depends="init" ekleyin scalac görev kullanmak için

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

Umarım, bu yardımcı olur.

+5

'unuzda scalac için bir yazım yok. Bunu scala-compiler.jar satırından eklemeliydim: ' ' (Scala 2.10 RC2'yi Kullanma). Bundan önce şu hatayı aldım: 'scala.tools.ant.FastScalac sınıfının ihtiyaç duyduğu bir sınıf bulunamadı: scala/reflect/internal/settings/MutableSettings $ SettingValue sınıf yükleyiciyi kullanarak AntClassLoader' –

+1

Brew kullanarak scala kurarken,/lib/to/libexec/lib/değiştirmek gerekiyor –