java.lang.NoClassDefFoundError: rcaller/RCaller in java-ee
java.lang.NoClassDefFoundError: rcaller/RCaller in java-ee
我正在尝试使用 R 调用程序将回归 R 代码集成到我的 j2ee 项目中。
我的数据源来自 mysql 数据库。所以我使用 RMYSQL 作为包。
我的代码在 java 项目下工作正常,但是当我将它移到支持 bean class 时它抛出异常:java.lang.NoClassDefFoundError: rcaller/RCaller
在 Maven 依赖项中,它仅存在 Rcaller 的 2.8 版本。我需要 2.5 版本,所以我手动将它添加到构建路径中。
支持 bean 方法是:
try {
RCaller caller = new RCaller();
RCode code = new RCode();
caller.setRscriptExecutable("Rscript.exe");
code.clear();
caller.setRCode(code);
code.R_require("RMySQL");
code.R_require("rpart");
code.addRCode("mydb= dbConnect(MySQL(),user='root',password='root',dbname='db',host='localhost')");
code.addRCode("rs= dbSendQuery(mydb,'select * from table')");
code.addRCode("data = fetch(rs,n=-1)");
code.addRCode("data= data[data[['cred']]>0,]");
code.addRCode("data$navig <- ifelse(data$navig == 'Chrome',1,ifelse(data$navig == 'Firefox',2,ifelse(data$navig == 'Android',3,ifelse(data$navig == 'iPhone',4,9))))");
code.addRCode("data$rate =as.factor(data$rate)");
code.addRCode("ad.apprentissage= rpart(rate~vqs+ibt+tbt+bf+n+down+ping, data=data,minsplit = 7)");
code.addRCode("predArbreDecision=predict(ad.apprentissage,newdata=data,type='class') ");
code.addRCode("table(data$rate, predArbreDecision)");
File file = code.startPlot();
// code.addRCode("ggplot(df, aes(x, y)) + geom_point() + geom_smooth(method='lm') + ggtitle('y = f(x)')");
code.addRCode("plot(ad.apprentissage,main='Arbre de décision de la vidéo Streaming')");
code.addRCode("text(ad.apprentissage)");
caller.runOnly();
ImageIcon ii = code.getPlot(file);
code.showPlot(file);
} catch (Exception e) {
System.out.println(e.toString());
}
为了在 jsf 页面中显示图形,我调用了该函数如下:
#{video_R_IntegrationBean.Test3()}
由于您正在使用 maven
,因此您必须遵循 maven
方式。
如果您有这个 2.5 版本的 jar,请将其安装在您的本地存储库或自定义存储库中。
请参阅 here
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar \
-DgroupId=your.groupId \
-DartifactId=your-artifactId \
-Dversion=version \
-Dpackaging=jar \
-DlocalRepositoryPath=path-to-specific-local-repo
一旦它安装在您的存储库中,您必须在 pom.xml
中将其声明为依赖项,当然不要忘记在 repositories
部分中引用您的本地存储库。
我正在尝试使用 R 调用程序将回归 R 代码集成到我的 j2ee 项目中。
我的数据源来自 mysql 数据库。所以我使用 RMYSQL 作为包。
我的代码在 java 项目下工作正常,但是当我将它移到支持 bean class 时它抛出异常:java.lang.NoClassDefFoundError: rcaller/RCaller
在 Maven 依赖项中,它仅存在 Rcaller 的 2.8 版本。我需要 2.5 版本,所以我手动将它添加到构建路径中。
支持 bean 方法是:
try {
RCaller caller = new RCaller();
RCode code = new RCode();
caller.setRscriptExecutable("Rscript.exe");
code.clear();
caller.setRCode(code);
code.R_require("RMySQL");
code.R_require("rpart");
code.addRCode("mydb= dbConnect(MySQL(),user='root',password='root',dbname='db',host='localhost')");
code.addRCode("rs= dbSendQuery(mydb,'select * from table')");
code.addRCode("data = fetch(rs,n=-1)");
code.addRCode("data= data[data[['cred']]>0,]");
code.addRCode("data$navig <- ifelse(data$navig == 'Chrome',1,ifelse(data$navig == 'Firefox',2,ifelse(data$navig == 'Android',3,ifelse(data$navig == 'iPhone',4,9))))");
code.addRCode("data$rate =as.factor(data$rate)");
code.addRCode("ad.apprentissage= rpart(rate~vqs+ibt+tbt+bf+n+down+ping, data=data,minsplit = 7)");
code.addRCode("predArbreDecision=predict(ad.apprentissage,newdata=data,type='class') ");
code.addRCode("table(data$rate, predArbreDecision)");
File file = code.startPlot();
// code.addRCode("ggplot(df, aes(x, y)) + geom_point() + geom_smooth(method='lm') + ggtitle('y = f(x)')");
code.addRCode("plot(ad.apprentissage,main='Arbre de décision de la vidéo Streaming')");
code.addRCode("text(ad.apprentissage)");
caller.runOnly();
ImageIcon ii = code.getPlot(file);
code.showPlot(file);
} catch (Exception e) {
System.out.println(e.toString());
}
为了在 jsf 页面中显示图形,我调用了该函数如下:
#{video_R_IntegrationBean.Test3()}
由于您正在使用 maven
,因此您必须遵循 maven
方式。
如果您有这个 2.5 版本的 jar,请将其安装在您的本地存储库或自定义存储库中。 请参阅 here
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar \
-DgroupId=your.groupId \
-DartifactId=your-artifactId \
-Dversion=version \
-Dpackaging=jar \
-DlocalRepositoryPath=path-to-specific-local-repo
一旦它安装在您的存储库中,您必须在 pom.xml
中将其声明为依赖项,当然不要忘记在 repositories
部分中引用您的本地存储库。