Comment puis-je avorte Buildr gracieusement?
-
10-10-2019 - |
Question
Je lance Buildr dans deux environnements différents (Windows XP et Linux) et donc je les installations locales Java et Scala dans des endroits différents. J'ai la pratique suivante pour vérifier que les variables d'environnement sont définies:
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 sortir Buildr de sorte 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)
Devrais-je jeter une exception (si oui, comment faire en Ruby)?
La solution
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 « compilateur écrasé ».
Réponse 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 niveau supérieur de votre projet, puis mettre un fichier avec une extension .rake
en elle. Définir vos fonctions il. Buildr chargera 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 dont vous aviez était bien, aussi, si vous préférez que)
Alors au sommet de votre buildfile vous pourriez avoir ceci:
require 'buildr/scala'
initialize_environment
# etc.