Как мне прервать Buildr изящно?
Я запускаю 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 ответ
Пытаться 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
выдает исключение в ruby. Вы также можете увидеть это называется raise
; они эквивалентны. Если вы не укажете тип, тип исключения будет RuntimeError
как в вашем примере "сбой компилятора".
Бонусный ответ: если вы хотите поместить эти проверки в функцию (как следует из первого комментария), вы можете создать каталог с именем tasks
на верхнем уровне вашего проекта, затем поместите файл с .rake
расширение в нем. Определите свои функции там. Buildr загрузит все такие файлы перед оценкой вашего buildfile.
Например, вы можете иметь файл с именем 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
Строковая интерполяция - чтобы быть более рубиновой. То, как ты это делал, тоже было хорошо, если ты предпочитаешь это.)
Тогда в верхней части вашего buildfile у вас может быть это:
require 'buildr/scala'
initialize_environment
# etc.