| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with this |
| # work for additional information regarding copyright ownership. The ASF |
| # licenses this file to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| module Buildr #:nodoc: |
| module Shell #:nodoc: |
| |
| class BeanShell < Base |
| include Buildr::JRebel |
| |
| VERSION = '2.0b4' |
| |
| specify :name => :bsh, :languages => [:java] |
| |
| class << self |
| def version |
| Buildr.settings.build['bsh'] || VERSION |
| end |
| |
| def artifact |
| "org.beanshell:bsh:jar:#{version}" |
| end |
| end |
| |
| def launch(task) |
| cp = ( project.compile.dependencies + |
| [project.path_to(:target, :classes), Buildr.artifact(BeanShell.artifact)] + |
| task.classpath ) |
| Java::Commands.java 'bsh.Console', { |
| :properties => jrebel_props(project).merge(task.properties), |
| :classpath => cp, |
| :java_args => jrebel_args + task.java_args |
| } |
| end |
| |
| end # BeanShell |
| |
| |
| class JIRB < Base |
| include JRebel |
| |
| JRUBY_VERSION = '1.6.2' |
| |
| def launch(task) |
| if jruby_home # if JRuby is installed, use it |
| cp = project.compile.dependencies + |
| [project.path_to(:target, :classes)] + |
| Dir.glob("#{jruby_home}#{File::SEPARATOR}lib#{File::SEPARATOR}*.jar") + |
| task.classpath |
| |
| props = { |
| 'jruby.home' => jruby_home, |
| 'jruby.lib' => "#{jruby_home}#{File::SEPARATOR}lib" |
| } |
| props.merge! jrebel_props(project) |
| props.merge! task.properties |
| |
| unless Util.win_os? |
| uname = `uname -m` |
| cpu = if uname =~ /i[34567]86/ |
| 'i386' |
| elsif uname == 'i86pc' |
| 'x86' |
| elsif uname =~ /amd64|x86_64/ |
| 'amd64' |
| end |
| |
| os = `uname -s | tr '[A-Z]' '[a-z]'` |
| path = if os == 'darwin' |
| 'darwin' |
| else |
| "#{os}-#{cpu}" |
| end |
| |
| props['jna.boot.library.path'] = "#{jruby_home}/lib/native/#{path}" |
| end |
| |
| props['jruby.script'] = if Util.win_os? then 'jruby.bat' else 'jruby' end |
| props['jruby.shell'] = if Util.win_os? then 'cmd.exe' else '/bin/sh' end |
| |
| args = [ |
| "-Xbootclasspath/a:#{Dir.glob("#{jruby_home}#{File::SEPARATOR}lib#{File::SEPARATOR}jruby*.jar").join File::PATH_SEPARATOR}" |
| ] + jrebel_args + task.java_args |
| |
| Java::Commands.java 'org.jruby.Main', "#{jruby_home}#{File::SEPARATOR}bin#{File::SEPARATOR}jirb", { |
| :properties => props, |
| :classpath => cp, |
| :java_args => args |
| } |
| else |
| cp = project.compile.dependencies + [ jruby_artifact, project.path_to(:target, :classes) ] + |
| task.classpath |
| props = jrebel_props(project).merge(task.properties) |
| args = jrebel_args + task.java_args |
| |
| Java::Commands.java 'org.jruby.Main', '--command', 'irb', { |
| :properties => props, |
| :classpath => cp, |
| :java_args => args |
| } |
| end |
| end |
| |
| private |
| def jruby_home |
| @jruby_home ||= RUBY_PLATFORM =~ /java/ ? RbConfig::CONFIG['prefix'] : ENV['JRUBY_HOME'] |
| end |
| |
| def jruby_artifact |
| version = Buildr.settings.build['jruby'] || JRUBY_VERSION |
| "org.jruby:jruby-complete:jar:#{version}" |
| end |
| |
| end |
| end |
| end |
| |
| Buildr::Shell.providers << Buildr::Shell::BeanShell |
| Buildr::Shell.providers << Buildr::Shell::JIRB |