blob: 76dc2d63640968404afb6d990b547ce28272b547 [file] [log] [blame]
# 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