首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: invokeMember GraalVM原生图像

TypeError: invokeMember GraalVM原生图像
EN

Stack Overflow用户
提问于 2020-05-23 10:32:13
回答 1查看 733关注 0票数 0

我正在尝试用GraalVM创建一个本机映像,我的代码:

代码语言:javascript
复制
import org.graalvm.polyglot.HostAccess;

public class Console {

    @HostAccess.Export
    public void print(String msg){
        System.out.println(msg);
    }
}

然后,我把代码本身叫做这个:

代码语言:javascript
复制
public void callMethod(CommonRequest request) throws ScriptException, IOException, NoSuchMethodException {
        StringBuilder s = new StringBuilder();

        s.append(new PluginJS().load(request.getMethodPath(), true));

        Context context = null;
        try {
            context = Context.newBuilder()
                    .allowHostAccess(HostAccess.ALL)
                    .allowAllAccess(true)
                    .allowCreateThread(true)
                    .allowHostClassLoading(true)
                    .allowIO(true)
                    .allowNativeAccess(true)
                    .allowCreateProcess(true).build();

            putMembers(context.getBindings("js"));

            context.eval("js", s.toString());

        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            context.close();

        }

    }

    private void putMembers(Value value) { 
        value.putMember("Console", new Console());


    }

当我在IDE或java -jar中运行时,它可以很好地工作,但是当我尝试编译到本机映像时会抛出一个错误。下面是用于编译本机映像的命令行后面的错误。

误差

JavaObjectcom.compiler.commons.log.Console@113a2d320 (com.compiler.commons.log.Console)上的TypeError: invokeMember (打印)失败,原因是:未知标识符:打印

命令行

代码语言:javascript
复制
graalvm-ce-java8-20.0.0/Contents/Home/bin/java -jar -agentlib:native-image-agent=config-merge-dir=/Users/ze/Documents/java/tool/config compiler-1.0-SNAPSHOT-jar-with-dependencies.jar

graalvm-ce-java8-20.0.0/Contents/Home/bin/native-image --language:js --initialize-at-build-time nomeApp -jar compiler-1.0-SNAPSHOT-jar-with-dependencies.jar

有人能帮帮我吗?非常感谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-24 09:39:44

我已经解决了,我需要从"/config“文件中清除,沿着代理执行应用程序,然后编译添加一些不同的参数。见下文:

代理

代码语言:javascript
复制
/Users/ze/Documents/programs/graalvm-ce-java8-20.0.0/Contents/Home/bin/java -jar -agentlib:native-image-agent=config-merge-dir=/Users/ze/Documents/gitprojects/java/tool/config ./target/compiler-1.0-SNAPSHOT-jar-with-dependencies.jar 

编译

代码语言:javascript
复制
sudo /Users/ze/Documents/programs/graalvm-ce-java8-20.0.0/Contents/Home/bin/native-image --language:js --initialize-at-build-time -H:+AllowIncompleteClasspath -H:+ReportExceptionStackTraces --report-unsupported-elements-at-runtime -H:ConfigurationFileDirectories=/Users/ze/Documents/gitprojects/java/tool/config nameOfApp -jar ./target/compiler-1.0-SNAPSHOT-jar-with-dependencies.jar
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61970674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档