Running JAR file from R using rJava (without spawning new process)
Let’s say we have this, very simple, structure of the project
.
|-- Manifest.txt
`-- src
`-- somepackage
`-- StringTest.java
where StringTest.java is a very simple Java class
package somepackage;
public class StringTest {
public String changeString(String str) {
return "I have changed the string: " + str;
}
public static void main(String [] arg) {
System.out.println(new StringTest().changeString("Hello"));
}
}
while Manifest.txt contains
Manifest-Version: 1.0 Main-Class: somepackage.StringTest
We can easily create JAR (“executable”) from these files using jar application
# create JAR > jar cfm test.jar Manifest.txt -C target somepackage/StringTest.class # execute JAR > java -jar test.jar I have changed the string: Hello
Now, let’s try to run this code inside R. It’s quite straightforward.
# make sure R will be able to pick it up
> export CLASSPATH=./test.jar
> R
R version 3.6.1 (2019-07-05) -- "Action of the Toes"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)
...
...
...
> library(rJava)
> .jinit()
> obj <- .jnew("somepackage.StringTest")
> s <- .jcall(obj, returnSig="V", method="main", c("Hello", "Hello") )
I have changed the string: Hello
>
July 25th, 2019 in
main entries