我如何在 JRuby 中加载已编译的 Java class?
How do i load a compiled Java class in JRuby?
所以,我从 Java 开始,在 JRuby 脚本或另一个 Java 应用程序中加载 class 时遇到了一些问题。让我们以这个文件为例:
package dice;
import java.util.Random;
public class Dice {
public int sides;
private Random random;
public Dice(int sides) {
this.sides = sides;
this.random = new Random();
}
public Dice() {
this.sides = 6;
this.random = new Random();
}
}
当我在 NetBeans 中编译它时,它会生成一个包含 class 文件的 jar 文件和一个 META-INF 文件。我可以在 JRuby 中要求它,但我不能做 java_import 部分:
irb(main):013:0> java.dice.Dice
Traceback (most recent call last):
7: from C:/jruby-9.2.4.1/bin/jirb:13:in `<main>'
6: from org/jruby/RubyKernel.java:1181:in `catch'
5: from org/jruby/RubyKernel.java:1181:in `catch'
4: from org/jruby/RubyKernel.java:1415:in `loop'
3: from org/jruby/RubyKernel.java:1043:in `eval'
2: from (irb):13:in `evaluate'
1: from org/jruby/javasupport/JavaPackage.java:252:in `method_missing'
NameError (missing class name (`java.dice.Dice'))
因为包声明我把dice放在dir dice里面,然后编译。
.
└── dice
├── Dice.class
└── Dice.java
运行 IRB
$ irb
我们需要将类路径添加到 Jruby 并使用 package prefix
导入
jruby-9.2.0.0 :001 > $CLASSPATH << "."
jruby-9.2.0.0 :002 > java_import 'dice.Dice'
=> [Java::Dice::Dice]
jruby-9.2.0.0 :003 > Dice.new
=> #<Java::Dice::Dice:0x4f9a3314>
仍在投票,但我自己发现了,我只需要做
Java::dice.Dice
因为,只有在 java 包的
文件夹中时,它才能在没有 Java::
部分的情况下工作
java.lang.System
所以,我从 Java 开始,在 JRuby 脚本或另一个 Java 应用程序中加载 class 时遇到了一些问题。让我们以这个文件为例:
package dice;
import java.util.Random;
public class Dice {
public int sides;
private Random random;
public Dice(int sides) {
this.sides = sides;
this.random = new Random();
}
public Dice() {
this.sides = 6;
this.random = new Random();
}
}
当我在 NetBeans 中编译它时,它会生成一个包含 class 文件的 jar 文件和一个 META-INF 文件。我可以在 JRuby 中要求它,但我不能做 java_import 部分:
irb(main):013:0> java.dice.Dice
Traceback (most recent call last):
7: from C:/jruby-9.2.4.1/bin/jirb:13:in `<main>'
6: from org/jruby/RubyKernel.java:1181:in `catch'
5: from org/jruby/RubyKernel.java:1181:in `catch'
4: from org/jruby/RubyKernel.java:1415:in `loop'
3: from org/jruby/RubyKernel.java:1043:in `eval'
2: from (irb):13:in `evaluate'
1: from org/jruby/javasupport/JavaPackage.java:252:in `method_missing'
NameError (missing class name (`java.dice.Dice'))
因为包声明我把dice放在dir dice里面,然后编译。
.
└── dice
├── Dice.class
└── Dice.java
运行 IRB
$ irb
我们需要将类路径添加到 Jruby 并使用 package prefix
jruby-9.2.0.0 :001 > $CLASSPATH << "."
jruby-9.2.0.0 :002 > java_import 'dice.Dice'
=> [Java::Dice::Dice]
jruby-9.2.0.0 :003 > Dice.new
=> #<Java::Dice::Dice:0x4f9a3314>
仍在投票,但我自己发现了,我只需要做
Java::dice.Dice
因为,只有在 java 包的
文件夹中时,它才能在没有Java::
部分的情况下工作
java.lang.System