Java-код работает в приложении, а не в сервлете - PullRequest
0 голосов
/ 14 декабря 2011

Вот ситуация.

Я реализую программное обеспечение для распознавания лиц в веб-приложении Java, которое включает в себя два файла .jar и собственную библиотеку .dylib.В обычном Java-приложении код работает нормально, однако, когда я пытаюсь загрузить библиотеку в сервлет, я получаю сообщение об ошибке, что файл .dylib не может быть найден.Как я могу заставить сервлет загрузить библиотеку, чтобы я мог получить доступ к программе распознавания лиц?

Вот мой код.Работающее приложение Java.

public static void main(String[] args) {

    FSDK.ActivateLibrary("G2TfLOGUH8hQehjxiB...");
    FSDK.Initialize();
    FSDK.Finalize();
}

Вот сервлет.

@WebServlet(name = "glassesServlet", urlPatterns = {"/glassesServlet"})
public class glassesServlet extends HttpServlet {

/** 
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    try {

    FSDK.ActivateLibrary("G2TfLOGUH8hQehjxiBZtJvjmwyu...");
    FSDK.Initialize();
    FSDK.Finalize();

    } finally {            
        out.close();
    }
}

Теперь вот ошибка, которую сервер выдает каждый раз, когда я пытаюсь запустить с сервера.

WARNING: StandardWrapperValve[glassesServlet]: PWC1406: Servlet.service() for servlet         
java.lang.NoClassDefFoundError: Could not initialize class Luxand.FSDK$IFaceSDK

плюс некоторый другой код, который указывает, откуда он возник.Этот класс, Luxand.FSDK$IFaceSDK, является классом внутри файла .jar, который хранится в папке библиотеки.

Любая помощь будет великолепна, спасибо!

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

убедитесь, что папка библиотеки находится в classpath среды развертывания

0 голосов
/ 21 ноября 2015

Оба приведенных выше ответа верны.Чтобы немного подробнее ...

На вашем ноутбуке это, вероятно, просто получение файла .dylib из корня вашего проекта.

В Linux вам нужен файл .so.Неважно, где он находится, если он находится в пути переменной среды LD_LIBRARY_PATH.Я обнаружил, что самый простой способ - установить его в командной строке при запуске сервера.

Так что, если вы используете толстый JAR, это будет что-то вроде:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/luxand/luxand-something.so java -jar Server.jar -Dsomeothersetting=something
...