0

jrubyプロジェクトに取り組んでいますが、コンソールログが次のようになっているNokogiriに関連するXMLPARSINGエラーが発生しています。

> XmlDomParserContext.java:94:in `<init>':
> java.lang.NoClassDefFoundError: Could not initialize class
> nokogiri.internals.NokogiriHelpers
>         from XmlDocument.java:317:in `newFromData'
>         from XmlDocument.java:334:in `read_memory'
>         from XmlDocument$INVOKER$s$0$0$read_memory.gen:-1:in `call'
>         from CachingCallSite.java:70:in `call'
>         from FCallManyArgsNode.java:60:in `interpret'
>         from NewlineNode.java:105:in `interpret'
>         from BlockNode.java:71:in `interpret'
>         from IfNode.java:118:in `interpret'
>         from LocalAsgnNode.java:123:in `interpret'
>         from NewlineNode.java:105:in `interpret'
>         from BlockNode.java:71:in `interpret'
>         from ASTInterpreter.java:75:in `INTERPRET_METHOD'
>         from InterpretedMethod.java:112:in `call'
>         from DefaultMethod.java:158:in `call'
>         from CachingCallSite.java:79:in `callBlock'
>         from CachingCallSite.java:85:in `call'
>         from CallManyArgsBlockPassNode.java:57:in `interpret'
>         from NewlineNode.java:105:in `interpret'
>         from ASTInterpreter.java:75:in `INTERPRET_METHOD'
>         from InterpretedMethod.java:182:in `call'
>         from DefaultMethod.java:192:in `call'
>         from CachingCallSite.java:326:in `cacheAndCall'
>         from CachingCallSite.java:170:in `call'
>         from CallOneArgNode.java:57:in `interpret'
>         from DAsgnNode.java:110:in `interpret'
>         from NewlineNode.java:105:in `interpret'
>         from BlockNode.java:71:in `interpret'
>         from RescueNode.java:226:in `executeBody'
>         from RescueNode.java:123:in `interpretWithJavaExceptions'
>         from RescueNode.java:113:in `interpret'
>         from BeginNode.java:83:in `interpret'
>         from NewlineNode.java:105:in `interpret'
>         from BlockNode.java:71:in `interpret'
>         from ASTInterpreter.java:112:in `INTERPRET_BLOCK'
>         from Interpreted19Block.java:209:in `evalBlockBody'
>         from Interpreted19Block.java:197:in `yield'
>         from Interpreted19Block.java:128:in `call'
>         from Block.java:89:in `call'
>         from RubyProc.java:261:in `call'
>         from RubyProc.java:213:in `call'
>         from Ruby.java:2873:in `tearDown'
>         from Ruby.java:2857:in `tearDown'
>         from Main.java:267:in `internalRun'
>         from Main.java:230:in `run'
>         from Main.java:214:in `run'
>         from Main.java:194:in `main'

jrubyのバージョンは[jruby1.7.0.RC1(1.9.3p203)2012-09-25 8e849de on Java HotSpot(TM)Client VM 1.6.0_37-b06[WindowsXP-x86]]です。

OS:Windows XP

Javaバージョン:javaバージョン "1.6.0_37" Java(TM)SEランタイム環境(ビルド1.6.0_37-b06)Java HotSpot(TM)クライアントVM(ビルド20.12-b01、混合モード、共有)

誰かがこの問題について何か考えを持っていますか?

4

1 に答える 1

0

例外をスローした静的初期化ブロックがクラスにある可能性がnokogiri.internals.NokogiriHelpersありますが、何らかの理由で例外が抑制されました。

staticブロックをtry-に入れてみて、catch例外をログに記録して確認してください。

class NokogiriHelpers {
    static {
         try { 
             // your initialization stuff
         } catch (Exception e) {
             // log e
         }
    } 
}

で定義した可能性のある静的定数にはNokogiriHelpers静的初期化子もあることに注意してください。あなたが持っている場合

class NokogiriHelpers {
    static int FOO = computeFoo();
}

未チェックの例外をcomputeFoo()スローする可能性があるため、次のように変更する必要があります

class NokogiriHelpers {
    static int FOO;
    static {
         try { 
             FOO = computeFoo();
         } catch (Exception e) {
             // log e
         }
    } 
}
于 2012-11-03T07:41:47.210 に答える