2010-06-23 16 views
6

Ich habe ein Paket für R, das mehrere JAR-Dateien enthält. Für eine bessere Wartung möchte ich die Gläser in einem separaten Paket aufteilen und die R-Quelle und zwei kleine Gläser im Hauptpaket haben.
Aber jetzt bekomme ich immer einen "NoClassDefFoundError" von rJava, wenn ich meine Funktionen anrufe.
Wie legt man den Klassenpfad für rJava in R fest?

Im Hauptpaket habe ich eine onLoad-Funktion, die die JVM mit der .jpackage-Funktion startet.
Entsprechend der Hilfe nimmt diese Funktion ein "morePaths" -Argument, zu dem ich den absoluten Pfad zu den zwei JAR-Dateien zur Verfügung stellte. Aber es wird nicht funktionieren.

Ich habe auch versucht

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

Innerhalb der onLoad-Funktion.

würde Jeder Hinweis zu erkennen ist,
Martin

+0

Versuchen: http://www.rforge.net/doc/packages/rJava/jinit.html wir sollte .jpackage anstelle von .jinit verwenden. – Martin

+0

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

Antwort

5

Nach dieser .jaddClassPath

.jaddClassPath("blah.jar") 
+0

Probieren Sie es einfach aus. Funktioniert nicht. – Martin

+0

Dies ist der richtige Weg (die einzige Möglichkeit?), Jars zu einem Klassenpfad in RJava hinzuzufügen. Sie versuchen, Ihre Gläser in einem Paket zu haben, und rufen Sie sie dann von einem anderen an? Nicht sicher, ob das funktioniert. Warum würdest du das überhaupt wollen? Wenn Sie Pakete trennen müssen, legen Sie Wrapper-R-Funktionen in das "jar-Paket", das Sie dann aus Ihrem zweiten Paket aufrufen. – Shane

+0

Wenn ich .jaddClassPath ("blah.jar") versuche, werden die JAR-Dateien nicht in der Ausgabe von .jclassPath() angezeigt. Und ich muss das Paket aufteilen, weil die libs zu groß sind. Für eine bessere Versionskontrolle. – Martin

Verwandte Themen