def find_source(objfile) base = File.basename(objfile, '.class') SRC.find { |s| File.basename(s, '.java') == base } end def find_object(srcfile) File.join("bin", File.basename(srcfile).ext('class')) end directory "bin/test" directory "bin/java" SRC = FileList.new('src/java/*.java').add('src/test/*.java') OBJ = SRC.collect { |fn| find_object(fn) } task :compile => OBJ task :build => ["bin/test", "bin/java", :compile] task :default => [:build] task :clean do rm OBJ end rule '.class' => [ proc do |tn| find_source(tn) end ] do |t| dest_dir = File.dirname(t.name) sh "javac -cp #{dest_dir};junit.jar #{t.source} -d #{dest_dir}" end