# File lib/buildr/java/commands.rb, line 43
      def java(*args, &block)
        options = Hash === args.last ? args.pop : {}
        options[:verbose] ||= trace?(:java)
        rake_check_options options, :classpath, :java_args, :properties, :name, :verbose

        name = options[:name]
        if name.nil?
          name = "java #{args.first}"
        end

        cmd_args = [path_to_bin('java')]
        cp = classpath_from(options)
        cmd_args << '-classpath' << cp.join(File::PATH_SEPARATOR) unless cp.empty?
        options[:properties].each { |k, v| cmd_args << "-D#{k}=#{v}" } if options[:properties]
        cmd_args += (options[:java_args] || (ENV['JAVA_OPTS'] || ENV['JAVA_OPTIONS']).to_s.split).flatten
        cmd_args += args.flatten.compact
        unless Buildr.application.options.dryrun
          info "Running #{name}" if name && options[:verbose]
          block = lambda { |ok, res| fail "Failed to execute #{name}, see errors above" unless ok } unless block
          cmd_args = cmd_args.map(&:inspect).join(' ') if Util.win_os?
          sh(*cmd_args) do |ok, ps|
            block.call ok, ps
          end
        end
      end