Changeset 5865
- Timestamp:
- 10/11/06 00:08:14
- Files:
-
- trunk/Rakefile (modified) (2 diffs)
- trunk/classloader/JerbilClassLoader.class (modified) (previous)
- trunk/classloader/JerbilClassLoader.java (modified) (3 diffs)
- trunk/lib/java_helper.rb (modified) (7 diffs)
- trunk/lib/java_task.rb (modified) (4 diffs)
- trunk/lib/javac_task.rb (modified) (1 diff)
- trunk/sample/Rakefile (modified) (2 diffs)
- trunk/sample/src/jerbil/sample/Main2.java (added)
- trunk/test/test_build.rb (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Rakefile
r5826 r5865 8 8 t.libs << "test" 9 9 t.test_files = FileList['test/test*.rb'] 10 t.verbose = true10 t.verbose = false 11 11 end 12 12 … … 33 33 puts "created sample Rakefile in #{dstfile}" 34 34 end 35 36 task :compile_classloader do |t| 37 javac = "javac" 38 retried = false 39 begin 40 Dir.chdir("classloader") do 41 sh %{#{javac} JerbilClassLoader.java} 42 end 43 rescue 44 if ENV['JAVA_HOME'] && !retried 45 javac = File.join(ENV['JAVA_HOME'], "bin", "javac") 46 retried = true 47 retry 48 end 49 50 $stderr << "Make sure javac is in your PATH, or set JAVA_HOME" 51 raise 52 end 53 end trunk/classloader/JerbilClassLoader.java
r5808 r5865 9 9 */ 10 10 public class JerbilClassLoader extends ClassLoader { 11 12 private static final boolean debug = Boolean.getBoolean( "jerbil.debug" ); 13 11 14 public JerbilClassLoader(ClassLoader parent) { 12 15 super( parent ); … … 15 18 public Class<?> findClass(String name) throws 16 19 ClassNotFoundException { 17 //System.err.println( "findClass(" + name + ")" ); 20 21 if (debug) { 22 System.err.println( "findClass(" + name + ")" ); 23 } 24 18 25 byte[] classBytes = findClassBytes( name ); 19 26 return defineClass( name, classBytes, … … 64 71 } 65 72 } 66 67 68 73 } trunk/lib/java_helper.rb
r5856 r5865 4 4 rescue LoadError 5 5 require 'rubygems' 6 retry 6 require 'rjb' 7 require 'rake' 7 8 end 8 9 … … 42 43 l 43 44 end 44 45 45 46 46 def serialize(obj) … … 79 79 #jvmargs << "-Djava.library.path=#{ENV['JAVA_HOME']}/jre/lib/i386" 80 80 81 jvmargs += [ "-Djava.system.class.loader=JerbilClassLoader", 82 "-Dbuild.root=#{build_dir}" ] unless build_dir.nil? 83 81 if build_dir 82 jvmargs += [ "-Djava.system.class.loader=JerbilClassLoader", 83 "-Dbuild.root=#{build_dir}", "-Djerbil.debug=false" ] 84 end 85 84 86 begin 85 87 Rjb::load(classpath.to_cp, jvmargs) … … 91 93 end 92 94 93 module ExtraArgumentTaking 94 attr_reader :extra_args 95 95 module ExtraArgumentTaking 96 96 def self.append_features(base) 97 super 98 class << base 97 super 98 class << base 99 99 def create_alias_for(actual, new) 100 100 @@aliases ||= {} … … 103 103 end 104 104 end 105 106 attr_reader :extra_args 105 107 106 108 def options(*args) … … 109 111 110 112 def add_files(files) 111 @extra_args += files.to_a 112 end 113 113 add_extra_args files.to_a 114 end 115 116 def add_extra_args(*args) 117 @extra_args = [] if extra_args.nil? 118 @extra_args += args.flatten 119 end 120 114 121 def method_missing(symbol, *args) 115 122 arg = symbol.to_s.sub(/=/, "") 116 @extra_args ||= []117 123 if @@aliases && @@aliases.has_key?(arg) 118 124 arg = @@aliases[arg] 119 125 end 120 121 @extra_args << "-#{arg}" 122 @extra_args += args 126 add_extra_args "-#{arg}", args 123 127 end 124 128 end … … 259 263 @java_files.each{ |f| f.gsub!( replace, replace_with ) } 260 264 end 261 262 263 264 end 265 265 end 266 trunk/lib/java_task.rb
r5864 r5865 4 4 module Rake 5 5 class JavaTask < TaskLib 6 6 include ExtraArgumentTaking 7 7 8 # Name for task 8 9 attr_accessor :name … … 11 12 attr_accessor :classname 12 13 13 attr_accessor :description14 15 14 # program args 16 15 attr_accessor :parameters 17 18 # vm args 19 attr_accessor :vmargs 20 21 attr_accessor :profile 22 23 attr_accessor :yourkit_args 24 attr_accessor :yourkit_platform 25 16 26 17 attr_accessor :classpath 27 attr_accessor :max_mem 28 29 attr_accessor :logging_conf 30 31 attr_accessor :debug 32 attr_accessor :debug_port 33 34 attr_accessor :verbose 35 36 attr_accessor :dependencies 37 38 attr_accessor :fork 39 18 19 attr_accessor :fork 40 20 attr_accessor :in_vm 41 21 … … 44 24 @classname = classname 45 25 @parameters = [] 46 @classpath = "." 47 @yourkit_args = ["-agentlib:yjpagent=port=10001"] 48 @yourkit_platform = "linux-x86-32" 49 @max_mem = 1024 50 @logging_conf = nil 51 @debug = false 26 @classpath = "." 52 27 @in_vm = false 53 @debug_port = 8000 54 @verbose = false 55 @fork = false 56 @vmargs = [] 57 @dependencies = [ :compile ] 28 @fork = false 58 29 yield self if block_given? 59 30 define 60 31 end 32 33 def yourkit(port=1001, platform="linux-x86-32") 34 add_extra_args "-agentlib:yjpagent=port=#{port}" 35 ENV['LD_LIBRARY_PATH'] = ":./lib/yourkit/#{platform}" 36 end 61 37 38 def sys_property(name,value) 39 add_extra_args "-D#{name}=#{value}" 40 end 41 42 def logging_conf=(file) 43 sys_property("java.util.logging.config.file", file) 44 end 45 46 def max_mem=(mem) 47 add_extra_args "-Xmx#{mem}M" 48 end 49 50 def debug(port=8000, suspend="n") 51 add_extra_args "-Xdebug", "-Xnoagent", 52 "-Xrunjdwp:transport=dt_socket,address=#{port},server=y,suspend=#{suspend}" 53 end 54 55 protected 62 56 def define 63 desc description unless description.nil?57 #desc "run #{classname}" if Rake.application.last_comment.nil? 64 58 task name => dependencies do |t| 65 59 … … 76 70 end 77 71 78 parms = [ "-cp", cp, "-Xmx#{max_mem}M" ] 79 parms += vmargs 80 81 unless logging_conf.nil? 82 parms << "-Djava.util.logging.config.file=#{logging_conf}" 83 end 84 85 if profile 86 parms += yourkit_args 87 ENV['LD_LIBRARY_PATH'] = ":./lib/yourkit/#{yourkit_platform}" 88 end 89 90 if debug 91 parms += [ 92 "-Xdebug", 93 "-Xnoagent", 94 "-Xrunjdwp:transport=dt_socket,address=#{debug_port},server=y,suspend=n" ] 95 end 96 72 parms = [ "-cp", cp ] 73 parms += extra_args unless extra_args.nil? 74 97 75 parms << classname 98 76 parms += parameters 99 100 puts "java #{parms.join(' ')}" if verbose 101 77 102 78 if @fork 103 sh "java", *parms 79 RakeFileUtils.verbose(verbose) do 80 sh "java", *parms 81 end 104 82 else 105 83 begin trunk/lib/javac_task.rb
r5847 r5865 39 39 parms += java_files 40 40 41 #require 'pp' 42 #pp parms 43 41 44 ret = 0 42 45 javacout = printWriter_to_s do |pw| trunk/sample/Rakefile
r5864 r5865 5 5 include JavaHelper 6 6 7 load_vm(CLASSPATH )7 load_vm(CLASSPATH, nil, JAVA_BUILD_DIR) 8 8 9 9 task :default => :compile … … 67 67 t.classpath = CLASSPATH 68 68 t.parameters = [ "0", "20" ] 69 t.depends_on :compile 70 t.fork = true 71 end 72 73 Rake::JavaTask.new(:test_java_task, "jerbil.sample.Main2") do |t| 74 t.classpath = CLASSPATH 75 t.sys_property "jerbil.foo", "baz" 76 t.max_mem = 64 77 t.logging_conf = "foo.properties" 78 t.fork = true 69 79 t.depends_on :compile 70 t.fork = true71 80 end 72 81 trunk/test/test_build.rb
r5864 r5865 10 10 class TestBuild < Test::Unit::TestCase 11 11 def test_compile 12 run_rake (:clean,:compile) do |ok,res|12 run_rake_clean(:compile) do |ok,res| 13 13 assert ok 14 14 assert_files_exist(JAVA_FILES.to_classfiles) … … 17 17 18 18 def test_javadoc 19 run_rake (:clean,:javadoc) do |ok,res|19 run_rake_clean(:javadoc) do |ok,res| 20 20 assert ok 21 21 assert File.exists?(File.join(JAVADOC_DIR, "index.html")) … … 24 24 25 25 def test_test_compile 26 run_rake (:clean,:test_compile) do |ok,res|26 run_rake_clean(:test_compile) do |ok,res| 27 27 assert ok 28 28 assert_files_exist(JAVA_FILES.to_classfiles) … … 32 32 33 33 def test_jar 34 run_rake (:clean,:jar) do |ok,res|34 run_rake_clean(:jar) do |ok,res| 35 35 assert ok 36 36 assert File.exists?(DISTJAR) … … 39 39 40 40 def test_test 41 run_rake (:clean,:test) do |ok,res|41 run_rake_clean(:test) do |ok,res| 42 42 assert ok 43 43 assert File.directory?(TESTOUTPUTDIR) … … 47 47 48 48 def test_find_annotations 49 run_rake (:clean,:find_annotations) do |ok,res|49 run_rake_clean(:find_annotations) do |ok,res| 50 50 assert ok 51 51 assert File.exists?(ANNOTATED_CLASSES) … … 58 58 59 59 def test_run_no_fork 60 run_rake (:clean,:run) do |ok,res|60 run_rake_clean(:run) do |ok,res| 61 61 assert !ok 62 62 assert_equal 70, res.exitstatus, "NB: this test fails on Mac OS X" … … 65 65 66 66 def test_run_forked_ok 67 run_rake (:clean,:run_forked) do |ok,res|67 run_rake_clean(:run_forked) do |ok,res| 68 68 assert ok 69 69 end … … 71 71 72 72 def test_run_in_vm 73 run_rake (:clean,:run_in_vm) do |ok,res|73 run_rake_clean(:run_in_vm) do |ok,res| 74 74 assert !ok 75 75 assert_equal 70, res.exitstatus … … 78 78 79 79 def test_run_forked_fail 80 run_rake (:clean,:run_forked_fail) do |ok,res|80 run_rake_clean(:run_forked_fail) do |ok,res| 81 81 assert !ok 82 82 assert_equal 1, res.exitstatus … … 85 85 86 86 def test_clean 87 run_rake(:clean, :compile, :jar, :test) 87 run_rake_clean(:jar) 88 88 89 run_rake(:clean) do |ok,res| 89 90 assert ok … … 94 95 end 95 96 97 def test_test_java_task 98 run_rake(:clean, :test_java_task) 99 end 100 96 101 private 97 102 def assert_files_exist(files) 98 103 files.each {|f| assert File.exists?(f)} 104 end 105 106 # runs rake clean in a separate process to 107 # detect classloader problems 108 def run_rake_clean(*args) 109 run_rake(:clean) 110 if block_given? 111 run_rake(args) { |ok,res| yield ok,res } 112 else 113 run_rake(args) 114 end 99 115 end 100 116 … … 104 120 cmd = args.join(" ") 105 121 #on windows, exec invokes a subshell which does not inherit environment variables, 106 #therefore we cannot invoke rake directly 107 108 unless block_given? 122 #therefore we cannot invoke rake directly 123 unless block_given? 109 124 block = lambda {|ok,res| flunk "rake failed: #{res}" unless ok } 110 125 end
