无法在zxing core.jar文件中找到MultiFormatReader类

时间:2014-02-14 17:49:18

标签: java jar jruby zxing

我正在尝试使用更新版本的zxing,并尝试使用ecin/zxing gem中的core.jarjavase.jar文件替换这些文件的3.0快照版本NameErrorcom/google/zxing/MultiFormatReader 3}}

我在第一堂课上得到一个core.jar我试图引用jar -tf文件中的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 > ,尽管当我这样做时,这个类出现在新的jar中{{1}}。该软件使用旧的jar文件运行文件。

有关如何进一步调试的任何建议吗?

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

{{1}}

2 个答案:

答案 0 :(得分: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之上。

答案 1 :(得分:0)

我发现这与我的PATH变量指向的Java版本有关。虽然我很久以前在我的Mac上安装了版本7,但我从来没有更新过我的.bash_profile并且正在为各种命令行操作获取6。在我将PATH更改为指向7之后,问题就消失了。

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

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