/** Exits the build immediately with a given exit code. */
  public void exit(int code) {
    if (buildEventListener != null) {
      buildEventListener.triggerEvent("Exiting", code);
    }

    // Prevent system.exit during unit/integration testing
    if (System.getProperty("grails.cli.testing") != null
        || System.getProperty("grails.disable.exit") != null) {
      throw new ScriptExitException(code);
    }
    GrailsConsole.getInstance().flush();
    System.exit(code);
  }
  /**
   * Resolves the value for a given property name. It first looks for a system property, then in the
   * BuildSettings configuration, and finally uses the given default value if other options are
   * exhausted.
   */
  public Object getPropertyValue(String propName, Object defaultValue) {
    // First check whether we have a system property with the given name.
    Object value = System.getProperty(propName);
    if (value != null) return value;

    // Now try the BuildSettings settings.
    value = buildProps.get(propName);

    // Return the BuildSettings value if there is one, otherwise use the default.
    return value != null ? value : defaultValue;
  }