我正在尝试使用R调用程序将回归R代码集成到我的j2ee项目中。
我的数据源来自mysql数据库。所以我用RMYSQL作为包。
我的代码在java项目下工作正常,但是当我将其移入支持bean类时,它抛出异常:java.lang.NoClassDefFoundError: rcaller/RCaller

在maven依赖中,仅存在2.8版的Rcaller。而且我需要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部分中引用本地存储库。

07-26 06:13