2010-06-23 62 views
6

我有一个R包,其中包含几个jar文件。 为了更好的维护,我想将瓶子拆分成单独的包装,并在主包装中放入R源和两个小罐子。
但现在我总是从rJava得到一个“NoClassDefFoundError”,如果我打电话给我的功能。
如何在R中设置rJava的类路径?

在主包中我有一个onLoad函数,它使用.jpackage函数启动JVM。
根据帮助,这个函数接受一个“morePaths”参数,我向其中提供了两个jar文件的绝对路径。但它不会工作。

我也使用

jar.one = paste(lib,pkg,"java","One.jar",sep=.Platform$file.sep) 
jar.two = paste(lib,pkg,"java","Two.jar",sep=.Platform$file.sep) 
.jinit(classpath=c(jar.one,jar.two)) 

里面的onLoad功能尝试。

任何暗示将不胜感激,
马丁

+0

根据此:http://www.rforge.net/doc/packages/rJava/jinit.html 我们应该使用.jpackage而不是.jinit。 – Martin 2010-06-23 17:35:02

+0

在这里看到http://stackoverflow.com/questions/4998825/frustration-using-rjava-to-call-a-third-party-java-jar – mut1na 2012-11-04 11:27:02

回答

5

尝试.jaddClassPath

.jaddClassPath("blah.jar") 
+0

刚刚尝试过这一个。不起作用。 – Martin 2010-06-23 17:42:54

+0

这是正确的方法(唯一的方法?)将Jars添加到RJava中的类路径中。你试图把你的罐子放在一个包装里,然后再打另一个包装?不知道这是否会奏效。你为什么要这么做?如果你需要分离包,把包装R函数放在“jar包”中,然后你将从第二个包中调用它。 – Shane 2010-06-23 17:46:58

+0

如果我尝试使用.jaddClassPath(“blah.jar”),则jar文件不会显示在.jclassPath()的输出中。 我必须拆分包,因为库很大。为了更好的版本控制。 – Martin 2010-06-23 18:04:26