我刚刚设置了一个Centos7虚拟机来玩GraalVM.我下载了graalvm-1.0.0-rc1,安装了Netbeans8.2,并下载了FastR扩展(通过gu).然后我编写了一个简单的java程序来测试一些支持的各种语言.以下是我写的代码:
package javatest;
import org.graalvm.polyglot.*;
import java.io.PrintStream;
import java.util.Set;
public class JavaTest {
public static void main(String[] args) {
PrintStream output = System.out;
Context context = Context.create();
Set<String> languages = context.getEngine().getLanguages().keySet();
output.println("Current Languages available in GraalVM: " + languages);
// TODO code application logic here
System.out.println("Java: Hello World");
context.eval("js","print('JavaScript: Hello World')");
context.eval("R", "print('R: Hello World');");
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
run:
Current Languages available in GraalVM: [R, js, llvm]
Java: Hello World
JavaScript: Hello World
FastR unexpected failure: error loading libR from: /usr/local/graalvm-1.0.0-
rc1/jre/languages/R/lib/libR.so.
If running on NFI backend, did you provide location of libtrufflenfi.so as
value of system property 'truffle.nfi.library'?
The current value is '/usr/local/graalvm-1.0.0-
rc1/jre/lib/amd64/libtrufflenfi.so'.
Details: Access to native code is not allowed by the host environment.
Exception in thread "main" org.graalvm.polyglot.PolyglotException
at org.graalvm.polyglot.Context.eval(Context.java:336)
at javatest.JavaTest.main(JavaTest.java:32)
Run Code Online (Sandbox Code Playgroud)
正如您在初始调用中看到的那样,可以看到支持的语言,它识别出R已经安装,但是一旦我在语言上调用eval它就会启动.trufflenfi.so文件存在且可用.我已将其定义为运行参数(即使我不需要).
我没有发现为什么显示"主机环境不允许访问本机代码"的原因并且不知所措.关于我做错了什么的任何想法?注意:我也尝试使用python和ruby进行相同的测试并获得相同的结果,但最简单的测试用例被删除.
这是使用GraalVM多语言API创建的多语言上下文的安全功能.默认情况下,每种语言都与主机环境隔离,因此不允许在文件系统中访问Java类,本机访问或文件.目前使用GraalVM 1.0.0-RC1,Ruby和R语言需要本机访问才能启动其环境.JavaScript和Python语言不需要本机访问引导.
如果要创建具有所有访问权限的上下文,可以创建如下的上下文:
Context.newBuilder().allowAllAccess(true).build();
Run Code Online (Sandbox Code Playgroud)
您还可以选择性地允许访问本机代码:
Context.newBuilder().allowNativeAccess(true).build();
Run Code Online (Sandbox Code Playgroud)
以下是您修复的示例:
package javatest;
import org.graalvm.polyglot.*;
import java.io.PrintStream;
import java.util.Set;
public class JavaTest {
public static void main(String[] args) {
PrintStream output = System.out;
Context context = Context.newBuilder().allowAllAccess(true).build();
Set<String> languages = context.getEngine().getLanguages().keySet();
output.println("Current Languages available in GraalVM: " + languages);
// TODO code application logic here
System.out.println("Java: Hello World");
context.eval("js","print('JavaScript: Hello World')");
context.eval("R", "print('R: Hello World');");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是使用Ruby和R的所有访问权限的更多示例:http: //www.graalvm.org/docs/graalvm-as-a-platform/embed/
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |