def javac(*args)
options = Hash === args.last ? args.pop : {}
rake_check_options options, :classpath, :sourcepath, :output, :javac_args, :name
files = args.flatten.each { |f| f.invoke if f.respond_to?(:invoke) }.map(&:to_s).
collect { |arg| File.directory?(arg) ? FileList["#{File.expand_path(arg)}/**/*.java"] : File.expand_path(arg) }.flatten
name = options[:name] || Dir.pwd
cmd_args = []
cp = classpath_from(options)
cmd_args << '-classpath' << cp.join(File::PATH_SEPARATOR) unless cp.empty?
cmd_args << '-sourcepath' << [options[:sourcepath]].flatten.join(File::PATH_SEPARATOR) if options[:sourcepath]
cmd_args << '-d' << File.expand_path(options[:output].to_s) if options[:output]
cmd_args += options[:javac_args].flatten if options[:javac_args]
cmd_args += files
unless Buildr.application.options.dryrun
mkdir_p options[:output] if options[:output]
info "Compiling #{files.size} source files in #{name}"
trace (['javac'] + cmd_args).join(' ')
Java.load
::Java::com.sun.tools.javac.Main.compile(cmd_args.to_java(::Java::java.lang.String)) == 0 or
fail 'Failed to compile, see errors above'
end
end