情况就是这样。
我正在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文件夹中。
任何帮助都会很棒,谢谢!
答案 0 :(得分:2)
确保库文件夹位于部署环境的类路径
答案 1 :(得分:0)
以上两个答案都是正确的。提供更多细节...
在你的笔记本电脑上,它可能只是从项目的根目录中获取.dylib文件。
在Linux上,您需要.so文件。只要它在LD_LIBRARY_PATH环境变量路径上,它就在哪里并不重要。我发现最简单的方法是在启动服务器的命令行上设置它。
所以如果你使用的是胖JAR,那就像是:
std::vector::erase()