2010-06-23 14 views
6

Ho un pacchetto per R che contiene diversi file jar. Per una manutenzione migliore, voglio suddividere i vasi in un pacchetto separato e avere la sorgente R e due piccoli vasi nel pacchetto principale.
Ma ora ottengo sempre un "NoClassDefFoundError" da rJava, se chiamo le mie funzioni.
Come impostare il classpath per rJava in R?

Nel pacchetto principale ho una funzione onLoad, che avvia la JVM con la funzione .jpackage.
In base all'aiuto questa funzione accetta un argomento "morePaths", a cui ho fornito il percorso assoluto per i due file jar. Ma non funzionerà.

Ho anche provato usando

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)) 

All'interno della funzione onLoad.

Qualsiasi suggerimento sarebbe apprezzato,
Martin

+0

Secondo questo: http://www.rforge.net/doc/packages/rJava/jinit.html siamo dovrebbe usare .jpackage invece di .jinit. – Martin

+0

vedere qui http://stackoverflow.com/questions/4998825/frustration-using-rjava-to-call-a-third-party-java-jar – mut1na

risposta

5

Prova .jaddClassPath

.jaddClassPath("blah.jar") 
+0

Ho appena provato questo. Non funziona – Martin

+0

Questo è il modo giusto (l'unico modo?) Per aggiungere Jars a un classpath in RJava. Stai provando ad avere i tuoi vasi in un unico pacchetto e poi li chiami da un altro? Non sono sicuro che funzionerà. Perché vorresti farlo? Se hai bisogno di separare i pacchetti, metti le funzioni wrapper R nel "pacchetto jar" che chiamerai dal tuo secondo pacchetto. – Shane

+0

Se provo .jaddClassPath ("blah.jar") i file jar non vengono visualizzati nell'output di .jclassPath(). E devo dividere il pacchetto, perché le librerie sono grandi. Per un migliore controllo della versione. – Martin

Problemi correlati