【问题标题】:Can't find MultiFormatReader class in zxing core.jar file在 zxing core.jar 文件中找不到 MultiFormatReader 类
【发布时间】:2014-02-15 23:52:59
【问题描述】:

我正在尝试使用更新的 zxing 版本,并尝试将 ecin/zxing gem 中的 core.jarjavase.jar 文件替换为 https://oss.sonatype.org/content/repositories/snapshots/com/google/zxing/core/ 中这些文件的 3.0 快照版本

我在我尝试引用的第一个类(com/google/zxing/MultiFormatReader 来自core.jar 文件)上得到一个NameError,即使当我执行jar -tf 时该类出现在新 jar 中。该软件使用旧的 jar 文件运行文件。

对如何进一步调试有什么建议吗?

更新:我创建了一个新的 gemset,其中包含一个只有 zxing 的 Gemfile,并重现了相同的行为,如下所示。

MacbookAir1:javlats2 palfvin$ irb
jruby-1.7.10 :001 > require 'zxing'
NameError: missing class or uppercase package name (`com.google.zxing.MultiFormatReader')
    from org/jruby/javasupport/JavaUtilities.java:54:in `get_proxy_or_package_under_package'
    from file:/Users/palfvin/.rvm/rubies/jruby-1.7.10/lib/jruby.jar!/jruby/java/java_package_module_template.rb:14:in `method_missing'
    from /Users/palfvin/.rvm/gems/jruby-1.7.10@javlats2/gems/zxing-0.3.1/lib/zxing/decoder.rb:12:in `ZXing'
    from /Users/palfvin/.rvm/gems/jruby-1.7.10@javlats2/gems/zxing-0.3.1/lib/zxing/decoder.rb:3:in `(root)'
    from org/jruby/RubyKernel.java:1083:in `require'
    from /Users/palfvin/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1:in `(root)'
    from /Users/palfvin/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55:in `require'
    from org/jruby/RubyKernel.java:1083:in `require'
    from /Users/palfvin/.rvm/gems/jruby-1.7.10@javlats2/gems/zxing-0.3.1/lib/zxing.rb:2:in `(root)'
    from /Users/palfvin/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:1:in `(root)'
    from org/jruby/RubyKernel.java:1119:in `eval'
    from /Users/palfvin/.rvm/rubies/jruby-1.7.10/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:135:in `require'
    from (irb):1:in `evaluate'
    from org/jruby/RubyKernel.java:1519:in `loop'
    from org/jruby/RubyKernel.java:1282:in `catch'
    from org/jruby/RubyKernel.java:1282:in `catch'
    from /Users/palfvin/.rvm/rubies/jruby-1.7.10/bin/irb:13:in `(root)'jruby-1.7.10 :002 > 

【问题讨论】:

  • core.jar 的位置有变化吗?确保它的位置在你的类路径中。
  • 它肯定在那里。您可能实际上并未在类路径中包含 jar 文件。
  • @Alan 不,我没有进行任何更改。应用程序在旧的 jar 文件中运行良好。
  • @SeanOwen 正如我在问题中所说,应用程序在旧的 jar 文件中运行良好。如果我只更改 jar 文件,它会按照我指示的方式失败。如果我恢复旧的 jar 文件,它会再次运行良好。
  • 当然。你意识到新的 jar 在同一个地方有相同的类。因此,您包含新罐子而不是旧罐子的方式有问题。但两个罐子本身都很好。

标签: java jar jruby zxing


【解决方案1】:

这个会话从 IRB 开始,所以这个类出现在新版本的 JAR 中:

> require 'core-3.0.0-20140213.213916-7.jar'
> com.google.zxing.MultiFormatReader.new
 => #<Java::ComGoogleZxing::MultiFormatReader:0x6e644f41>

我的猜测是你没有以正确的方式替换 JAR,不知何故。我这样做是为了“升级”JAR:

pushd ~/.rvm/gems/jruby-1.7.10/gems/zxing-0.3.1/lib/zxing/
mv core.jar orig.jar
mv ~/Downloads/core-3.0.0-20140213.213916-7.jar core.jar

然后能够做到这一点:

> require 'zxing'
> ZXing.decode 'http://2d-code.co.uk/images/bbc-logo-in-qr-code.gif'
 => "http://bbc.co.uk/programmes"

我不确定 2.x 和 3.x API 之间的区别,但我当然可以将新的 JAR 放到旧的 JAR 中。

【讨论】:

  • 这个类完全没有区别,是的。
  • @Shepmaster 感谢您为此付出的努力。我更新了我的问题以显示我所看到的细节。我完全按照您使用单独的 gemset 的方式替换了 jar 文件。
  • @Shepmaster 我还能够重现 CRuby 2.0 的问题
  • @Shepmaster +1 尝试一下。有关更多信息,请参阅我的答案。
【解决方案2】:

我发现这与我的 PATH 变量指向的 Java 版本有关。尽管我很久以前就在我的 Mac 上安装了版本 7,但我从未更新过我的 .bash_profile,而是为各种命令行操作选择了 6。在我将 PATH 更改为指向 7 后,问题就消失了。

然而,仍然存在一些谜团,如下所示:

  • 当我发布我的问题时,zxing snapshot directories 中有名为 (-6.jar) 的 jar 文件,好像它们是为第 6 版构建的,但它们不再存在(不到 24 小时后)
  • 当我尝试那些 -6.jar 文件时,它们也失败了
  • 我在网上找不到任何关于 Java 6 和 Java 7 之间普遍不兼容的信息,这可以解释我遇到的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 2019-03-27
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多