2010-12-15 45 views
0

我在两个不同的环境(Windows XP和Linux)中运行Buildr,因此我在不同位置安装了本地Java和Scala。我有以下做法来检查环境变量设置:如何优雅地放弃Buildr?

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中做到这一点)?

回答

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,串插 - 更红宝石idomatic方式你有很细,太,如果你喜欢的)

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

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

回答我的所有问题并向我介绍了其他有用的东西。我除了除非关键字(我更喜欢'如果不是'),所有这些都被使用了。谢谢 ! – user272735 2010-12-16 19:38:20