我正在尝试使用更新版本的zxing,并尝试使用ecin/zxing gem中的core.jar
和javase.jar
文件替换这些文件的3.0快照版本NameError
和com/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}}
答案 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
文件时,它们也失败了