0

私は2つの異なる環境(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(文字列補間)をよりルビーイドマティックに変更しました。必要に応じて、それを使用した方法も問題ありませんでした。)

次に、ビルドファイルの上部に次のように表示できます。

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