java.lang.Ошибка в NoClassDefFoundError:com / google/common/base/internal/Финализатор$ShutDown (неправильное имя:com/ google/ общий / базовый / внутренний/ Финализатор)

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

Вопрос

Наше приложение использует MapMaker класс из коллекций Google, и мы получаем приведенное ниже исключение, но только в OS X 10.4 с использованием webstart.Он отлично работает при запуске из пакета приложений, а также в OS X 10.5 и Windows.

Это начало происходить с момента нашего обновления с RC2 до RC5 (мы пропустили все промежуточные версии).С тех пор мы обновились до версии 1.0 final и все еще видим проблему.

Я подозреваю, что какое-то взаимодействие с Sun's fix для эта проблема безопасности (что изменило способ работы URL.toString() в webstart), но пока у меня нет никаких доказательств.Кто-нибудь сталкивался с этой проблемой раньше?Любая помощь очень ценится!

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

Похоже, в манифесте нет ничего интересного:

$ 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.)
Это было полезно?

Решение

В подобном случае представляется гораздо более уместным файл с ошибкой в проекте Guava, вместо того, чтобы просить помощи по SO, но я изо всех сил пытаюсь объяснить, почему именно я так думаю.

Я предполагаю, что эта трассировка стека просто кажется гораздо более вероятной ошибка или более глубокая проблема в платформе, чем что-то, что вы делаете неправильно при использовании библиотеки.

Другие советы

Я предлагаю вам проверить файл manifest.mf вашего jar.Предположительно, webstart использует URLClassLoader , поэтому он следует приведенному здесь объяснению, чтобы найти другие jar.

Похоже, webstart не может найти библиотеку Google, которую вы используете.Это может быть связано с исправлением, о котором вы упомянули.

Редактировать: добавляем правильную ссылку здесь -> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top