[英]How do I use JRuby and Java?
仍然支持该功能吗? 我似乎找不到2008年左右以后的任何文档。 这是Oracle网站上的内容...
在运行时,JSR 223脚本API必须为您要使用的脚本语言找到合适的脚本引擎。 脚本引擎解释并执行脚本。 您可以通过下载jsr223-engines.tar.gz或jsr223-engines文件并将其扩展到系统中的某个位置(例如在scriptengines中),从java.net上的Scripting Project中获得当前的JSR 223第三方脚本引擎。目录。
但是它写于2007年,所有这些链接的链接不再可用。 所以我什么都无法得到任何JRuby引擎。
Oracle文档: http : //www.oracle.com/technetwork/articles/dsl/jruby-141877.html
如果有人可以向我提供最新的教程或文档,那么我可以在Java中使用JRuby。 目前,我已经成功运行了JRuby,但不知道如何在Java中设置脚本引擎。
非常感谢。
您可以从此处下载完整的jruby .jar文件
然后,我获取了一些示例代码:
import org.jruby.*;
import org.jruby.javasupport.JavaEmbedUtils;
import java.util.ArrayList;
public class RubyFromJava {
public String fooString() {
return "foo";
}
public static void main(String[] ARGV) {
System.out.println("Started");
RubyFromJava sTest = new RubyFromJava();
System.out.println("boring: " + sTest.fooString() + "\n"); // outputs foo
/* This script subclasses the java Object class.
It is then instantiated and the foobarString method is called. */
String script =
"require 'java'\n" +
"class RSubclass1 < java.lang.Object\n" + // subclassing java.* is magic
" def foobarString\n" +
" return @returnString = toString() + 'BAR'\n" +
" end\n" +
"end\n" +
"rsubclass = RSubclass1.new\n" +
"puts rsubclass.foobarString\n";
Ruby runtime = JavaEmbedUtils.initialize(new ArrayList());
RubyRuntimeAdapter evaler = JavaEmbedUtils.newRuntimeAdapter();
evaler.eval(runtime, script); // outputs org.jruby.proxy.java.lang.Object$Proxy0@1c7f37dBAR
System.out.println("-----------------\n");
/* This script subclasses the RubyFromJava class.
It is then instantiated and the foobarString method is called. */
script =
"require 'java'\n" +
"class RSubclass2 < Java::RubyFromJava\n" + // subclassing non {org,com}.* classpath requires you prefix the class with Java:: or java.
" def foobarString\n" +
" return @returnString = fooString() + 'BAR'\n" +
" end\n" +
"\n" +
"rsubclass = RSubclass2.new\n" +
"puts(rsubclass.foobarString())\n" +
"end";
evaler.eval(runtime, script); // outputs fooBAR
}
}
将其保存为RubyFromJava.java
,我在相同的目录下同时拥有RubyFromJava.java
和jruby-complete-9.0.0.0.rc1.jar
并运行:
rorra:~ > javac -cp ./jruby-complete-9.0.0.0.rc1.jar RubyFromJava.java
Note: RubyFromJava.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
rorra:~ > java -cp ./jruby-complete-9.0.0.0.rc1.jar:. RubyFromJava
Started
boring: foo
org.jruby.proxy.java.lang.Object$Proxy1@273e5037BAR
-----------------
fooBAR
按预期工作并从Java调用jruby代码
我在JRuby站点上找到了当前文档。 还是github / JRuby。
https://github.com/jruby/jruby/wiki/RedBridge
这称为“ RedBridge”,在此进行详细说明。 我启动并运行它。
这是我的示例代码:
import org.jruby.embed.ScriptingContainer;
public class RubyScript {
private RubyScript() {
int add = 5;
//initializes Ruby Environment
ScriptingContainer container = new ScriptingContainer();
//Sets Ruby var 'ans' as java.lang.Integer: add
container.put("ans",add);
container.runScriptlet("puts ans");
System.out.println(add + add);
}
public static void main(String[] args) {
new RubyScript();
}
}
输出:5 10
这是预期的。
感谢rorra提供的jruby-complete.jar链接,我将.jar复制到了我的java lib文件夹中并导入了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.