【问题标题】:jruby cannot load Java class com.example.CallMejruby 无法加载 Java 类 com.example.CallMe
【发布时间】:2014-10-16 08:15:27
【问题描述】:

我是 jruby 的新手。我试图运行他们的 github wiki 上给出的示例程序。 https://github.com/jruby/jruby/wiki/JRubyAndJavaCodeExamples#JRuby_calling_Java

我的目录结构是:

D:\learnJruby\CallJava.rb
D:\learnJruby\com\example\CallMe.java
D:\learnJruby\com\example\ISpeaker.java

当我跑步时

jruby CallJava.rb

我收到了这个错误

NameError: cannot link Java class com.example.CallMe, probable missing dependency: com/example/CallMe (wrong name: CallMe)
         for_name at org/jruby/javasupport/JavaClass.java:1286
  get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
      java_import at file:/C:/jruby-1.7.16/lib/jruby.jar!/jruby/java/core_ext/object.rb:26
              map at org/jruby/RubyArray.java:2412
      java_import at file:/C:/jruby-1.7.16/lib/jruby.jar!/jruby/java/core_ext/object.rb:22
           (root) at CallJava.rb:4

【问题讨论】:

    标签: jruby


    【解决方案1】:

    Java 是编译语言,那么您需要在运行之前将 .java 文件(源代码)编译为 .class 文件(JVM 字节码)。

    当您运行 Java 时,它会在目录中查找 .class 文件并从类路径中查找 .jar。

    您可以从 JRuby 中明确要求类:

    • require 'some.jar'

    • $CLASSPATH << "target/classes"; java_import org.asdf.ClassName

    https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby#accessing-and-importing-java-classes

    还有一个建议 - 不要在类或模块之外使用java_import,因为 java 类将被导入到全局范围(Object 类):

    require 'java'
    require 'foo.jar'
    
    java_import 'foo.bar.Foo' # Bad! Foo is global constant now
    
    module Bar
      java_import 'foo.bar.Baz' # good, Baz is constant in module Bar, e.g. Bar::Baz
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多