2010-12-15 6 views
0

Je lance Buildr dans deux environnements différents (Windows XP et Linux) et j'ai donc des installations Java et Scala locales dans différents endroits. J'ai la pratique suivante pour vérifier que les variables d'environnement sont définies:Comment abandonner Buildr avec élégance?

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 

Mais comment puis-je quitter Buildr pour que sa sortie avec ce genre de message:

Buildr aborted! 
RuntimeError : Scala compiler crashed: 
#<NullPointerException: unknown exception> 
(See full trace by running task with --trace) 

Dois-je jeter une exception (si oui, comment le faire dans Ruby)?

Répondre

3

Essayez 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 jette une exception dans le rubis. Vous pouvez également le voir appelé raise; ils sont équivalents. Si vous ne spécifiez pas de type, le type d'exception sera RuntimeError comme dans votre exemple de "plantage du compilateur". Bonus: Si vous voulez mettre ces contrôles dans une fonction (comme votre commentaire sur le premier suggère), vous pouvez créer un répertoire appelé tasks au plus haut niveau de votre projet, puis mettre un fichier .rake extension en elle. Définissez vos fonctions ici. Buildr va charger tous ces fichiers avant d'évaluer votre buildfile.

Par exemple, vous pourriez avoir un fichier nommé tasks/helpers.rake avec ce contenu:

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 

(Note:. J'ai changé quelques autres détails - unless, interpolation de chaîne - être plus rubis idiomatiques La façon vous eu était très bien, aussi, si vous préférez que)

Puis en haut de votre buildfile vous pourriez avoir ceci:.

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

a répondu à toutes mes questions et m'a également présenté d'autres choses utiles. Je les ai toutes utilisées sauf sauf-mot-clé (je préfère 'sinon'). Merci ! – user272735

Questions connexes