首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优雅地中止Buildr?

如何优雅地中止Buildr?
EN

Stack Overflow用户
提问于 2010-12-16 04:59:08
回答 1查看 136关注 0票数 0

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

代码语言:javascript
复制
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,以便它退出时显示这样的消息:

代码语言:javascript
复制
Buildr aborted!
RuntimeError : Scala compiler crashed:
#<NullPointerException: unknown exception>
(See full trace by running task with --trace)

我是否应该抛出一个异常(如果是,在Ruby中是怎么做的)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-16 05:40:56

试试fail

代码语言:javascript
复制
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将在评估构建文件之前加载所有此类文件。

例如,您可以有一个名为tasks/helpers.rake的文件,其中包含以下内容:

代码语言:javascript
复制
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-I风格。如果你喜欢的话,你的方式也很好。)

然后,在构建文件的顶部,您可以获得以下内容:

代码语言:javascript
复制
require 'buildr/scala'
initialize_environment
# etc.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4454811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档