java.lang.noclassDeffoundError: com/google/common/base/interno/finalizador $ desligamento (nome errado: com/google/common/base/interno/finalizador)

StackOverflow https://stackoverflow.com/questions/2049807

Pergunta

Nosso aplicativo usa o MapMaker classe do Google Collections e estamos obtendo a exceção abaixo, mas apenas no OS X 10.4 usando o WebStart. Funciona bem quando lançado a partir de um pacote de aplicativos e no OS X 10.5 e no Windows.

Isso começou a acontecer desde a nossa atualização do RC2 para o RC5 (pulamos todas as versões intervenientes). Desde então, atualizamos para 1,0 final e ainda vemos o problema.

Eu suspeito que alguma interação com a correção de Sun para esse problema de segurança (que mudou a maneira como o url.toString () funciona no webstart), mas ainda não tem nenhuma prova. Alguém viu esse problema antes? Qualquer ajuda é muito apreciada!

java.lang.NoClassDefFoundError: com/google/common/base/internal/Finalizer$ShutDown (wrong name: com/google/common/base/internal/Finalizer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.getMethod0(Class.java:2642)
at java.lang.Class.getMethod(Class.java:1579)
at com.google.common.base.FinalizableReferenceQueue.getStartFinalizer(FinalizableReferenceQueue.java:308)
at com.google.common.base.FinalizableReferenceQueue.<clinit>(FinalizableReferenceQueue.java:102)
at com.google.common.collect.MapMaker$QueueHolder.<clinit>(MapMaker.java:836)
at com.google.common.collect.MapMaker$SoftValueReference.<init>(MapMaker.java:1078)
at com.google.common.collect.MapMaker$Strength$2.referenceValue(MapMaker.java:379)
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:488)
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:462)
at com.google.common.collect.CustomConcurrentHashMap$Impl$Segment.put(CustomConcurrentHashMap.java:960)
at com.google.common.collect.CustomConcurrentHashMap$Impl.put(CustomConcurrentHashMap.java:1438)`

Não parece haver nada interessante no manifesto:

$ unzip -p google-collect.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 10.0-b19 (Sun Microsystems Inc.)
Foi útil?

Solução

Em um caso como este, parece muito mais apropriado Arquive um bug no projeto de goiaba, em vez de pedir ajuda, mas estou lutando para explicar por que exatamente acho que sim.

Eu acho que esse rastreamento de pilha parece muito mais provável de ser um incomodar Ou uma questão mais profunda na plataforma do que algo que você está fazendo de errado na maneira como está usando a biblioteca.

Outras dicas

Eu sugiro que você verifique o arquivo manifesto.mf do seu frasco. Presumivelmente, o Webstart usa um URLClassLoader, por isso segue a explicação aqui para localizar outros frascos.

Parece que o Webstart não consegue encontrar a biblioteca do Google que você está usando. Isso pode estar relacionado à correção que você mencionou.

Editar: Adicionando o link correto aqui -> http://java.sun.com/developer/books/javaprogramming/jar/basics/manifest.html#download

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top