0

我在两个不同的环境(Windows XP 和 Linux)中运行 Buildr,因此我在不同的位置安装了本地 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 中做到这一点)?

4

1 回答 1

3

尝试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字符串插值——更符合 ruby​​-idomatic。如果你愿意的话,你拥有它的方式也很好。)

然后在你的构建文件的顶部你可以有这个:

require 'buildr/scala'
initialize_environment
# etc.
于 2010-12-15T21:40:55.550 回答