UnsatisfiedLinkError и NoClassDefFoundError: Запуск Java Mapscript в Ubuntu 11.10 - PullRequest
0 голосов
/ 10 декабря 2011

Мы написали и запустили динамическое веб-приложение, используя MAPSERVER (версия 6.0.1) на платформе Windows, используя технологию Java. Теперь необходимо развернуть его на Ubuntu 11.10. Мы установили Apache Tomcat 6.0, Mapserver 6.0.1, Apache 2.0 и FWTools-2.0.1 (так как этот пакет содержит все необходимые инструменты для mapserver, если я не ошибаюсь, поэтому я не чувствовал никаких других инструментов для установки) , Мы развернули файл war (и поместили приложение без него) в папку веб-приложений Apache Tomcat. Я даже получил индексную страницу, на которой нет кода, связанного с API MapsScript. Но при получении другого сервлета с mapscript мы получаем следующую ошибку ...

java.lang.UnsatisfiedLinkError: no mapscript in java.library.path
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
java.lang.Runtime.loadLibrary0(Runtime.java:840)
java.lang.System.loadLibrary(System.java:1047)
edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23)
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283)

Снова, обновляя страницу браузера, где отображалась вышеуказанная ошибка, я получил изменение,

java.lang.NoClassDefFoundError: Could not initialize class    
edu.umn.gis.mapscript.mapscriptJNI
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283)

Я искал в сети о вышеупомянутой проблеме. Но, наконец, пустым. Пожалуйста, дайте представление о вышеуказанной проблеме.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2011

Я не собираюсь объяснять, почему вы получаете UnsatisfiedLinkError, но вместо этого я объясню, почему вы получаете NoClassDefFoundError при перезагрузке страницы.

NoClassDefFoundError с сообщением Could not initialize class ... генерируется JVM, когда он пытается инициализировать класс, который он уже пытался и не смог инициализировать.

Первая из ваших двух стековых трасс содержит строку

edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23)

Имя метода <clinit> обозначает статический инициализатор класса mapscriptJNI. Итак, в момент, когда был выдан UnsatisfiedLinkError, JVM пыталась инициализировать этот класс. Глядя на сообщение об ошибке, кажется, что этот статический инициализатор пытался загрузить библиотеку собственного кода mapscript, но не смог.

Эта ошибка UnsatisfiedLinkError приводит к сбою инициализации класса mapscriptJNI. JVM хранит записи обо всех классах, которые не удалось инициализировать, и если вы попытаетесь снова инициализировать один из этих классов, вы получите сообщение NoClassDefFoundError с сообщением о том, что он не может инициализировать этот класс.

Когда вы обновляете страницу, вы заканчиваете тем, что JVM пытается инициализировать класс mapscriptJNI во второй раз. Конечно, этот класс не удалось инициализировать в предыдущий раз. Ваша вторая трассировка стека содержит именно ту ошибку, которую я описал.

Короче говоря, UnsatisfiedLinkError является настоящей ошибкой. Исправьте это, и другой уйдет.

0 голосов
/ 10 декабря 2011

Я бы проверил следующие 2 пункта:

  1. Является ли файл mapscript.jar на Tomcat или, по крайней мере, на пути к классам вашего веб-приложения? (NoClassDefFoundError - ваша большая подсказка здесь)
  2. Является ли libmapscript.so на вашем LD_LIBRARY_PATH или -Djava.library.path? (UnsatisfiedLinkError, поскольку общий объект не может быть найден)

Попробуйте взглянуть на эту запись рядом с разделом Запуск Java MapsScript (в Linux).

Надеюсь, это поможет!

...