使用来自JRuby的Mahout会引发"缺少类或大写包名称"对于某些课程

时间:2014-02-05 20:28:58

标签: java jruby mahout

我试图通过要求latest stable Mahout distribution中的以下三个JAR文件在JRuby中使用Mahout。

  • 象夫核-0.9.jar
  • 象夫集成-0.9.jar
  • 象夫-数学0.9.jar

我尝试使用的一些类工作正常,但有些特别是没有加载。相反,我得到像这样的例外:

NameError: missing class or uppercase package name (`org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefUserBasedRecommender')
  get_proxy_or_package_under_package at org/jruby/javasupport/JavaUtilities.java:54
                      method_missing at file:/Users/bloudermilk/.rbenv/versions/jruby-1.7.10/lib/jruby.jar!/jruby/java/java_package_module_template.rb:14
                              (root) at _test.rb:9

我确信该类存在于包中,如it is mentioned in the docs。实际上我也可以解压缩mahout-core JAR并查看其中的相应.class文件。

我在这里将测试回购上传到GitHub:https://gist.github.com/bloudermilk/8832036

我没有任何Java经验,所以我似乎错过了一些明显的东西。为什么JRuby不能找到这个课程?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

当我尝试这个时,我收到了如下错误:

Java::OrgApacheMahoutCfTasteImplRecommender::GenericBooleanPrefUserBasedRecommender
NameError: cannot link Java class org.apache.mahout.cf.taste.impl.recommender.GenericBooleanPrefUserBasedRecommender, probable missing dependency:

我的猜测是你的类路径上没有东西。我采用“大锤子”的方法来获取类路径中的所有内容并且能够使其工作:

Dir['./mahout/*jar'].each {|f| require f}
Dir['./mahout/lib/*jar'].each {|f| require f}
Java::OrgApacheMahoutCfTasteImplRecommender::GenericBooleanPrefUserBasedRecommender