0 votes

java.lang.NoClassDefFoundError : com/google/common/base/internal/Finalizer$ShutDown (nom erroné : com/google/common/base/internal/Finalizer)

Notre application utilise le MapMaker à partir des collections Google, et nous obtenons l'exception ci-dessous, mais seulement sur OS X 10.4 en utilisant webstart. Il fonctionne bien lorsqu'il est lancé à partir d'un paquet d'applications, et sous OS X 10.5 et Windows.

Cela a commencé à se produire depuis notre mise à niveau de RC2 à RC5 (nous avons ignoré toutes les versions intermédiaires). Nous avons depuis mis à niveau vers la version 1.0 finale et nous constatons toujours le problème.

Je suspecte une interaction avec le correctif de Sun pour ce problème de sécurité (qui a changé la façon dont URL.toString() fonctionne dans webstart), mais je n'ai pas encore de preuve. Quelqu'un a-t-il déjà rencontré ce problème ? Toute aide est la bienvenue !

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)`

Il ne semble pas y avoir de choses intéressantes dans le manifeste :

$ 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.)

1voto

Kevin Bourrillion Points 19677

Dans un cas comme celui-ci, il semble beaucoup plus approprié de signaler un bogue dans le projet Guava plutôt que de demander de l'aide sur l'OS, mais j'ai du mal à expliquer pourquoi exactement je pense ainsi.

Je suppose que cette trace de pile semble beaucoup plus probable d'être un bug ou un problème plus profond dans la plate-forme, plutôt que quelque chose que vous faites mal dans la façon dont vous utilisez la bibliothèque.

0voto

Yoni Points 5806

Je vous suggère de vérifier le fichier manifest.mf de votre jar. Vraisemblablement webstart utilise un URLClassLoader, donc il suit l'explication ici pour localiser d'autres jars.

Il semble que webstart ne puisse pas trouver la bibliothèque google que vous utilisez. Cela pourrait être lié à la correction que vous avez mentionnée.

Editar: ajouter le lien correct ici -> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X