Java代码在App中工作,而不是在Servlet中

时间:2011-12-14 17:15:48

标签: java macos servlets netbeans noclassdeffounderror

情况就是这样。

我正在Java Web应用程序上实现面部识别软件,其中包括两个.jar文件和一个.dylib本机库。在普通的Java应用程序中,代码工作正常,但是当我尝试在servlet中加载库时,我收到的错误是无法找到.dylib。如何让servlet加载库以便我可以访问面部识别软件?

这是我的代码。有效的Java应用程序。

public static void main(String[] args) {

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

这是servlet。

@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文件中的一个类,它存储在Library文件夹中。

任何帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:2)

确保库文件夹位于部署环境的类路径

答案 1 :(得分:0)

以上两个答案都是正确的。提供更多细节...

在你的笔记本电脑上,它可能只是从项目的根目录中获取.dylib文件。

在Linux上,您需要.so文件。只要它在LD_LIBRARY_PATH环境变量路径上,它就在哪里并不重要。我发现最简单的方法是在启动服务器的命令行上设置它。

所以如果你使用的是胖JAR,那就像是:

std::vector::erase()