Пожалуйста, мне нужна ваша помощь.Ошибка JSP/R: java.lang.NoClassDefFoundError: org/rosuda/JRI/Rengine
У меня есть этот класс Java
package com.stephen.crawler;
import org.rosuda.JRI.Rengine;
public class JRI_Interface {
Rengine r;
String str_globalPath="/home/pavel/workspace/opendata/r_script/";
public JRI_Interface (String str_fuente) {
r = new Rengine(new String[] { "--no-save" }, false, null);
r.eval("source(\""+str_globalPath+str_fuente+"\")");
}
public void exec_RProcedure(String str_procedure) {
r.eval(str_procedure);
}
public String[] exec_RFunction (String str_procedure) {
return r.eval(str_procedure).asStringArray();
}
}
И это отлично работает, если я исполню:
package com.stephen.crawler;
public class JRI_Start_1 {
public static void main(String[] args)
{
JRI_Interface j = new JRI_Interface("staticdata.r");
j.exec_RProcedure("loadParametersOD()");
String obj[]=j.exec_RFunction("getLoadedParametersOD()");
System.out.println (obj.length);
}
}
Однако, когда я выполняю с помощью JSP с Tomcat:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%>
<%@ page import="com.stephen.crawler.*" %>
<%@ page import="org.rosuda.JRI.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My Title</title>
</head>
<%
JRI_Interface j = new JRI_Interface("staticdata.r");
j.exec_RProcedure("loadParametersOD()");
String obj[]=j.exec_RFunction("getLoadedParametersOD()");
%>
<body>
</body>
</html>
Я получаю следующее сообщение:
> org.apache.jasper.JasperException: Ha sucedido una excepción al
> procesar la página JSP /Inicio.jsp en línea 14
>
> 11: <title>My Title</title>
> 12: </head>
> 13: <%
> 14: JRI_Interface j = new JRI_Interface("staticdata.r");
> 15: j.exec_RProcedure("loadParametersOD()");
> 16: String obj[]=j.exec_RFunction("getLoadedParametersOD()");
> 17: %>
>
> Stacktrace:
> org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> causa raíz
>
> javax.servlet.ServletException: java.lang.NoClassDefFoundError:
> org/rosuda/JRI/Rengine
> org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
> org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:146)
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> causa raíz
>
> java.lang.NoClassDefFoundError: org/rosuda/JRI/Rengine
> com.stephen.crawler.JRI_Interface.<init>(JRI_Interface.java:12)
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:124)
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> causa raíz
>
> java.lang.ClassNotFoundException: org.rosuda.JRI.Rengine
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
> com.stephen.crawler.JRI_Interface.<init>(JRI_Interface.java:12)
> org.apache.jsp.Inicio_jsp._jspService(Inicio_jsp.java:124)
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Пропустить что-нибудь ?. Кажется, я все сконфигурировал ....
Большое спасибо.
Спасибо. Я сделал все, что вы сказали. Но ничего не происходит. На самом деле каталог WEB-INF/classes не существует. Я должен был создать его. Я скопировал свой класс (JRI_Interface.class с учетом всего пути пакета: com.stephen.crawler) в этот новый каталог и мой .jar (JRIEngine.jar) на WEB-INF/lib, однако в дереве Eclipse (Project Explorer) те каталоги пусты. Ничего не происходит = ( – Lev