Компиляция Scala 2.8.x-код с Apache Buildr


Я изо всех сил пытался заставить Buildr скомпилировать мой проект Scala 2.8, и я надеялся, что кто-то уже понял это.

В настоящее время у меня есть стандартное приложение HelloWorld со следующим файлом сборки:

ENV['JAVA_HOME'] = 'C:Program Files (x86)Javajdk1.6.0_17'
ENV['SCALA_HOME'] = 'C:scala-2.8.0.Beta1-RC6'

define "HelloWorld" do

  #artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0'
  require 'buildr/scala'

  puts Scala.version

end

Когда я запускаю buildr, я получаю следующий результат:

(in C:/Users/Travis/eclipse_ws/HelloWorld, развитие)
2.7.5
Строительство HelloWorld
Составление введен в C:/Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr прервана!
Crashed [31mscala компилятор разбился:
#←[0m

Первая проблема-это NoClassDefFoundError-он не может найти основной класс компилятора scala. Вторая проблема-это Scala.версия для печати 2.7.5. Это неверно, поскольку путь SCALA_HOME указывает на выпуск 2.8.

Наконец, использование флага --trace показывает мне, что Buildr генерирует несколько правильный команда scalac, и когда я запускаю эту команду вручную, все компилируется. Я говорю, что это несколько правильно только потому, что некоторые записи cp дублируются. Смотрите следующее:

Scalac-classpath C:/scala-2.8.0.Beta1-RC6 / lib / scala-библиотека.баночка;C:/scala-2.8.0.Beta1-RC6 / lib / scala-компилятор.баночка;C:/scala-2.8.0.Beta1-RC6 / lib / scala-библиотека.баночка;C:/scala-2.8.0.Beta1-RC6 / lib / scala-компилятор.банку -источник C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala -д C:/Users/Travis/eclipse_ws/HelloWorld/target/classes -многословный-g C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala/hw/HelloWorld.scala

Еще одна вещь, которую я попытался (но ошибся в построителе), была установка следующего (что, как я думал, не требовалось без наличия SCALA_HOME):

#artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0'

Итак, есть идеи?

Вот краткий список моей системной информации: Win 7 64 бит JDK 6 32 бит установлен локально для buildr, но JDK 6 64 бит общесистемный Ruby 1.8.6 32 бит Buildr 1.3.5 32 немного Скала 2.8.0.Beta1-RC6

Еще одна вещь, которую я думаю сделать, это переустановить мой 32-битный JDK и вытащить его из каталога с именем (x86). Я обнаружил, что винтики с файлами Scala bat, хотя я не уверен, имеет ли это отношение к моим текущим проблемам.

Заранее спасибо!

3 7

3 ответа:

Понял это. Глупая проблема. В Buildr(или, может быть, более обобщенно в Ruby?), вызов метода require должен находиться в верхней части файла (или, по крайней мере, не внутри блока define).

Требуется 'buildr/scala'

Таким образом, как NoClassDefFoundError, так и неверная версия, отображаемая puts Scala.версия была исправлена этим. Вот как должен был выглядеть мой сценарий:

require 'buildr/scala'

ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17'
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6'

define 'HelloWorld' do

  puts Scala.version

end

Кстати: Buildr кажется довольно милым (быстрый, сжатый, конвенция закончена конфигурации и т. д.) как только вы поймете, что вы делаете : -)

С версией 1.4, на данный момент Вы можете сделать

Buildr.settings.build['scala.version'] = "2.8.0"
require 'buildr/scala'

И он будет использовать scala 2.8.

Buildr 1.4 поддерживает Scala 2.8, а 1.4.2 будет использовать 2.8 по умолчанию.