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)?

Était-ce utile?

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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top