Как мне прервать Buildr изящно? - PullRequest
0 голосов
/ 15 декабря 2010

Я запускаю Buildr в двух разных средах (Windows XP и Linux), и поэтому у меня локальные установки Java и Scala в разных местах. У меня есть следующая практика, чтобы проверить, что переменные среды установлены:

require 'buildr/scala'
# Can I put these checks on a function ? How ?
ENV['JAVA_HOME'] ||= Buildr.settings.user['java_home']
if ENV['JAVA_HOME'].nil? then
  puts "Required environment variable JAVA_HOME was not set. Value can also be set in personal settings."
  Process.exit 1
end
puts 'JAVA_HOME = ' + ENV['JAVA_HOME']

ENV['SCALA_HOME'] ||= Buildr.settings.user['scala_home']
if ENV['SCALA_HOME'].nil? then
  puts "Required environment variable SCALA_HOME was not set. Value can also be set in personal settings."
  Process.exit 1
end
puts 'SCALA_HOME = ' + ENV['SCALA_HOME']

puts 'Scala version: ' + Scala.version

define "HelloWorld" do
  puts 'Hello World !'
end

Но как мне выйти из Buildr, чтобы он выходил с таким сообщением:

Buildr aborted!
RuntimeError : Scala compiler crashed:
#<NullPointerException: unknown exception>
(See full trace by running task with --trace)

Должен ли я вызвать исключение (если да, как это сделать в Ruby)?

1 Ответ

3 голосов
/ 16 декабря 2010

Попробуйте fail:

if ENV['SCALA_HOME'].nil? then
  fail "Required environment variable SCALA_HOME was not set. Value can also be set in personal settings."
end

fail создает исключение в рубине. Вы также можете увидеть его под названием raise; они эквивалентны. Если вы не укажете тип, тип исключения будет RuntimeError, как в вашем примере «Сбой компилятора».

Бонусный ответ: если вы хотите поместить эти проверки в функцию (как следует из первого комментария), вы можете создать каталог с именем tasks на верхнем уровне вашего проекта, а затем поместить файл с .rake расширение в нем. Определите свои функции там. Buildr загрузит все такие файлы перед проверкой вашего файла сборки.

Например, у вас может быть файл с именем tasks/helpers.rake со следующим содержимым:

def initialize_environment
  ENV['JAVA_HOME'] ||= Buildr.settings.user['java_home']
  unless ENV['JAVA_HOME']
    fail "Required environment variable JAVA_HOME was not set. Value can also be set in personal settings."
  end
  puts "JAVA_HOME = #{ENV['JAVA_HOME']}"
  # etc.
end

(Примечание: я изменил несколько других деталей - unless, интерполяцию строк - чтобы они стали более рубиново-идиоматическими. То, как вы это сделали, тоже было хорошо, если вы этого хотите.)

Тогда в верхней части вашего файла сборки вы можете получить следующее:

require 'buildr/scala'
initialize_environment
# etc.
...