java - 对于某些类,使用 JRuby 中的 Mahout 会引发 "missing class or uppercase package name"

标签 java jruby mahout

我尝试在 JRuby 中使用 Mahout,需要 latest stable Mahout distribution 中的以下三个 JAR 文件。 .

  • mahout-core-0.9.jar
  • mahout-integration-0.9.jar
  • mahout-math-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 找不到这个类?我该如何解决这个问题?

最佳答案

当我尝试此操作时,出现如下错误:

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

关于java - 对于某些类,使用 JRuby 中的 Mahout 会引发 "missing class or uppercase package name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587814/

相关文章:

象夫味道 : in-memory DataModel that supports set/removePreference

java - 地址在本地计算机上无效 [仅限 Windows 8]

java - jackson :如何反序列化 JSON 数组中的空元素

java - 如何复制文件并将完整路径粘贴到 JTextField

java - 将字符串转换为 BigDecimal 并添加逗号分隔符

ruby-on-rails - JRuby on Rails:将文件夹添加到类路径

ruby-on-rails - ActiveRecord::JDBCError: 错误:无法打开扩展控制文件

ruby - JRuby "no such file to load"

java - Java编译器说找不到符号。为什么?

algorithm - mahout 中 StandardNaiveBayesClassifier 和 ComplementaryNaiveBayesClassifier 的区别