настроить муравей для скалы - PullRequest
19 голосов
/ 12 января 2011

Как мне установить antlib.xml для scala, чтобы заставить муравья работать?

Прямо сейчас я сталкиваюсь со следующей ошибкой при запуске ant в файле build.xml, который содержит задачи 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.

Я разархивировал scala-2.8.1.final/lib/scala-compiler.jar, но я не знаю, куда поместить содержимое.

Вот соответствующий фрагмент кода муравья из файла 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>

Ответ

В вашем файле 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>

Моя проблема заключалась в том, что переменная окружения $SCALA_HOME(${env.SCALA_HOME}) указывал на неправильное место (на один уровень слишком глубоко: /usr/local/scala-2.8.1.final/bin/, а не просто /usr/local/scala-2.8.1.final/, и поэтому каталог lib не может быть найден.

1 Ответ

20 голосов
/ 12 января 2011

Файл antlib.xml содержится в файле scala-compiler.jar.Вы должны поместить это в свой путь к классу.Чтобы определить задачу scalac ant, поместите следующее определение в файл сборки ant (это взято из 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>

Чтобы использовать задачу scalac, добавьте атрибут depends="init" в свою задачу, например,

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...