【发布时间】:2014-02-15 23:52:59
【问题描述】:
我正在尝试使用更新的 zxing 版本,并尝试将 ecin/zxing gem 中的 core.jar 和 javase.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 在同一个地方有相同的类。因此,您包含新罐子而不是旧罐子的方式有问题。但两个罐子本身都很好。