Скомпилируйте код Scala 2.8.x с помощью Apache Buildr

StackOverflow https://stackoverflow.com/questions/1978183

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

  puts Scala.version

end

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

(в разделе C:/Users/Travis/eclipse_ws/HelloWorld, разработка)
2.7.5
Построение адского мира
Компиляция HelloWorld в C:/Users/Travis/eclipse_ws/HelloWorld/target/classes
Сборка прервана!
←[Сбой компилятора 31mScala:
#←[0 м

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

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

scalac - путь к классу C:/scala-2.8.0.Beta1-RC6/lib/scala-library.jar;C:/scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar;C:/scala-2.8.0.Beta1-RC6/lib/scala-library.jar;C:/scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar -исходный путь C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala -d C:/Users/Travis/eclipse_ws/HelloWorld/target/classes -подробный -g C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala/hw/HelloWorld.scala

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

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

Итак, есть какие-нибудь идеи?

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

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

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

Это было полезно?

Решение

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

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

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top