Компиляция 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 ответа:
Понял это. Глупая проблема. В 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 кажется довольно милым (быстрый, сжатый, конвенция закончена конфигурации и т. д.) как только вы поймете, что вы делаете : -)