我在两个不同的环境(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中做到这一点)?

有帮助吗?

解决方案

尝试 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.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top