Changeset 5865

Show
Ignore:
Timestamp:
10/11/06 00:08:14
Author:
jan
Message:

simplified java task

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Rakefile

    r5826 r5865  
    88  t.libs << "test" 
    99  t.test_files = FileList['test/test*.rb'] 
    10   t.verbose = tru
     10  t.verbose = fals
    1111end 
    1212 
     
    3333  puts "created sample Rakefile in #{dstfile}" 
    3434end 
     35 
     36task :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 
     53end 
  • trunk/classloader/JerbilClassLoader.java

    r5808 r5865  
    99 */ 
    1010public class JerbilClassLoader extends ClassLoader { 
     11   
     12    private static final boolean debug = Boolean.getBoolean( "jerbil.debug" ); 
     13     
    1114    public JerbilClassLoader(ClassLoader parent) { 
    1215        super( parent ); 
     
    1518    public Class<?> findClass(String name) throws 
    1619            ClassNotFoundException { 
    17         //System.err.println( "findClass(" + name + ")" ); 
     20               
     21        if (debug) { 
     22          System.err.println( "findClass(" + name + ")" ); 
     23        } 
     24         
    1825        byte[] classBytes = findClassBytes( name ); 
    1926        return defineClass( name, classBytes, 
     
    6471        } 
    6572    } 
    66  
    67  
    6873} 
  • trunk/lib/java_helper.rb

    r5856 r5865  
    44rescue LoadError 
    55        require 'rubygems' 
    6         retry 
     6        require 'rjb' 
     7        require 'rake' 
    78end 
    89 
     
    4243    l 
    4344  end 
    44    
    4545   
    4646  def serialize(obj) 
     
    7979    #jvmargs << "-Djava.library.path=#{ENV['JAVA_HOME']}/jre/lib/i386" 
    8080     
    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         
    8486    begin 
    8587        Rjb::load(classpath.to_cp, jvmargs) 
     
    9193end 
    9294 
    93 module ExtraArgumentTaking 
    94     attr_reader :extra_args 
    95        
     95module ExtraArgumentTaking       
    9696    def self.append_features(base) 
    97       super     
    98       class << base 
     97      super          
     98      class << base         
    9999        def create_alias_for(actual, new) 
    100100          @@aliases ||= {} 
     
    103103      end 
    104104    end 
     105       
     106    attr_reader :extra_args 
    105107     
    106108    def options(*args) 
     
    109111     
    110112    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            
    114121    def method_missing(symbol, *args)    
    115122      arg = symbol.to_s.sub(/=/, "") 
    116       @extra_args ||= []       
    117123      if @@aliases && @@aliases.has_key?(arg)    
    118124        arg = @@aliases[arg]   
    119125      end 
    120        
    121       @extra_args << "-#{arg}" 
    122       @extra_args += args 
     126      add_extra_args "-#{arg}", args 
    123127    end 
    124128end 
     
    259263    @java_files.each{ |f| f.gsub!( replace, replace_with ) } 
    260264  end 
    261    
    262    
    263  
    264 end 
    265  
     265end 
     266 
  • trunk/lib/java_task.rb

    r5864 r5865  
    44module Rake 
    55  class JavaTask < TaskLib 
    6           
     6     include ExtraArgumentTaking 
     7      
    78     # Name for task 
    89     attr_accessor :name 
     
    1112     attr_accessor :classname 
    1213      
    13      attr_accessor :description 
    14       
    1514     # program args 
    1615     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          
    2617     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      
    4020     attr_accessor :in_vm 
    4121      
     
    4424        @classname = classname 
    4525        @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 = "."               
    5227        @in_vm = false 
    53         @debug_port = 8000 
    54         @verbose = false 
    55         @fork = false 
    56         @vmargs = [] 
    57         @dependencies = [ :compile ] 
     28        @fork = false    
    5829        yield self if block_given? 
    5930        define 
    6031     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 
    6137      
     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 
    6256     def define 
    63         desc description unless description.nil? 
     57        #desc "run #{classname}" if Rake.application.last_comment.nil?       
    6458        task name => dependencies do |t| 
    6559        
     
    7670        end 
    7771         
    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                
    9775        parms << classname 
    9876        parms += parameters 
    99          
    100         puts "java #{parms.join(' ')}" if verbose 
    101          
     77                       
    10278        if @fork 
    103           sh "java", *parms                   
     79          RakeFileUtils.verbose(verbose) do  
     80            sh "java", *parms 
     81          end 
    10482        else           
    10583          begin 
  • trunk/lib/javac_task.rb

    r5847 r5865  
    3939        parms += java_files       
    4040          
     41        #require 'pp' 
     42        #pp parms 
     43         
    4144        ret = 0 
    4245        javacout = printWriter_to_s do |pw| 
  • trunk/sample/Rakefile

    r5864 r5865  
    55include JavaHelper 
    66 
    7 load_vm(CLASSPATH
     7load_vm(CLASSPATH, nil, JAVA_BUILD_DIR
    88 
    99task :default => :compile 
     
    6767  t.classpath = CLASSPATH 
    6868  t.parameters = [ "0", "20" ] 
     69  t.depends_on :compile  
     70  t.fork = true 
     71end 
     72 
     73Rake::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 
    6979  t.depends_on :compile 
    70   t.fork = true 
    7180end 
    7281 
  • trunk/test/test_build.rb

    r5864 r5865  
    1010class TestBuild < Test::Unit::TestCase 
    1111  def test_compile 
    12     run_rake(:clean, :compile) do |ok,res| 
     12    run_rake_clean(:compile) do |ok,res| 
    1313      assert ok 
    1414      assert_files_exist(JAVA_FILES.to_classfiles) 
     
    1717   
    1818  def test_javadoc 
    19     run_rake(:clean, :javadoc) do |ok,res| 
     19    run_rake_clean(:javadoc) do |ok,res| 
    2020      assert ok 
    2121      assert File.exists?(File.join(JAVADOC_DIR, "index.html")) 
     
    2424   
    2525  def test_test_compile 
    26     run_rake(:clean, :test_compile) do |ok,res| 
     26    run_rake_clean(:test_compile) do |ok,res| 
    2727      assert ok 
    2828      assert_files_exist(JAVA_FILES.to_classfiles) 
     
    3232   
    3333  def test_jar 
    34     run_rake(:clean, :jar) do |ok,res| 
     34    run_rake_clean(:jar) do |ok,res| 
    3535      assert ok 
    3636      assert File.exists?(DISTJAR) 
     
    3939   
    4040  def test_test 
    41     run_rake(:clean, :test) do |ok,res| 
     41    run_rake_clean(:test) do |ok,res| 
    4242      assert ok 
    4343      assert File.directory?(TESTOUTPUTDIR) 
     
    4747   
    4848  def test_find_annotations 
    49     run_rake(:clean, :find_annotations) do |ok,res| 
     49    run_rake_clean(:find_annotations) do |ok,res| 
    5050      assert ok 
    5151      assert File.exists?(ANNOTATED_CLASSES) 
     
    5858   
    5959  def test_run_no_fork 
    60     run_rake(:clean, :run) do |ok,res| 
     60    run_rake_clean(:run) do |ok,res| 
    6161      assert !ok 
    6262      assert_equal 70, res.exitstatus, "NB: this test fails on Mac OS X" 
     
    6565   
    6666  def test_run_forked_ok 
    67     run_rake(:clean, :run_forked) do |ok,res| 
     67    run_rake_clean(:run_forked) do |ok,res| 
    6868      assert ok          
    6969    end 
     
    7171   
    7272  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| 
    7474      assert !ok 
    7575      assert_equal 70, res.exitstatus            
     
    7878   
    7979  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| 
    8181      assert !ok             
    8282      assert_equal 1, res.exitstatus  
     
    8585   
    8686  def test_clean 
    87     run_rake(:clean, :compile, :jar, :test) 
     87    run_rake_clean(:jar)  
     88     
    8889    run_rake(:clean) do |ok,res| 
    8990      assert ok 
     
    9495  end 
    9596   
     97  def test_test_java_task 
     98    run_rake(:clean, :test_java_task) 
     99  end 
     100   
    96101  private 
    97102  def assert_files_exist(files) 
    98103    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 
    99115  end 
    100116   
     
    104120      cmd = args.join(" ") 
    105121      #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?       
    109124        block = lambda {|ok,res| flunk "rake failed: #{res}" unless ok } 
    110125      end