2010-06-23 4 views
6

У меня есть пакет для R, который содержит несколько файлов jar. Для лучшего обслуживания я хочу разбить банки в отдельной упаковке и иметь источник R и две маленькие банки в основной упаковке.
Но теперь я всегда получаю «NoClassDefFoundError» из rJava, если я вызываю свои функции.
Как установить путь класса для rJava в R?

В основной упаковке у меня есть функция onLoad, которая запускает JVM с помощью функции .jpackage.
В соответствии с этой помощью эта функция принимает аргумент «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.

Любой намек был бы оценен,
Martin

+0

В соответствии с этим: http://www.rforge.net/doc/packages/rJava/jinit.html мы должен использовать .jpackage вместо .jinit. – Martin

+0

см. Здесь http://stackoverflow.com/questions/4998825/frustration-using-rjava-to-call-a-third-party-java-jar – mut1na

ответ

5

Попробуйте .jaddClassPath

.jaddClassPath("blah.jar") 
+0

Просто попробовал это. Не работает. – Martin

+0

Это правильный способ (единственный способ?) Добавить Jars в classpath в RJava. Вы пытаетесь использовать свои банки в одном пакете, а затем называть их от другого? Не уверен, что это сработает. Зачем вам это делать? Если вам нужно разделить пакеты, поместите функции обертки R в «пакет jar», который вы выберете из второго пакета. – Shane

+0

Если я пытаюсь .jaddClassPath ("blah.jar"), файлы jar не отображаются в выводе .jclassPath(). И мне нужно разбить пакет, потому что libs - большие. Для лучшего контроля версий. – Martin