You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraalVM Polyglot最小示例在Windows运行失败求助

GraalVM Polyglot Windows路径异常问题排查与解决

问题描述

尝试运行一个极简GraalVM Polyglot示例,通过JavaScript实现两数相加。代码编译正常,但在Windows环境运行时出现路径相关异常,Docker容器中可正常执行。需明确问题原因及Windows环境下Polyglot的配置方法。

代码示例

package com.example;

import org.graalvm.polyglot.*;

public final class App {
    private App() {
    }

    public static void main(String[] args) {

        System.out.println( "starting up" );

        try ( Context context = Context.create() ){
            Value val = context.eval( "js", "10 + 2" );

            System.out.println( val.asInt() );
        }
        catch( Exception e ){
            System.out.println( e );
        }
    
        System.out.println("Hello World!");
    }
}

报错信息

starting up
[WARNING] 
java.lang.ExceptionInInitializerError
    at org.graalvm.polyglot.Engine.getImpl (Engine.java:438)
    at org.graalvm.polyglot.Engine$Builder.build (Engine.java:736)
    at org.graalvm.polyglot.Context$Builder.build (Context.java:1925)
    at org.graalvm.polyglot.Context.create (Context.java:979)
    at com.example.App.main (App.java:13)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:279)
    at java.lang.Thread.run (Thread.java:840)
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 2: /C:/Users/jacob/Dev/cfwasmer/cfwasmjava/cfwasm/target/classes/
    at sun.nio.fs.WindowsPathParser.normalize (WindowsPathParser.java:182)
    at sun.nio.fs.WindowsPathParser.parse (WindowsPathParser.java:153)
    at sun.nio.fs.WindowsPathParser.parse (WindowsPathParser.java:77)
    at sun.nio.fs.WindowsPath.parse (WindowsPath.java:92)
    at sun.nio.fs.WindowsFileSystem.getPath (WindowsFileSystem.java:232)
    at java.nio.file.Path.of (Path.java:147)
    at org.graalvm.polyglot.Engine$ClassPathIsolation.collectClassPathJars (Engine.java:1988)
    at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffleModule (Engine.java:1783)
    at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffle (Engine.java:1723)
    at org.graalvm.polyglot.Engine$1.searchServiceLoader (Engine.java:1682)
    at org.graalvm.polyglot.Engine$1.run (Engine.java:1668)
    at org.graalvm.polyglot.Engine$1.run (Engine.java:1663)
    at java.security.AccessController.doPrivileged (AccessController.java:318)
    at org.graalvm.polyglot.Engine.initEngineImpl (Engine.java:1663)
    at org.graalvm.polyglot.Engine$ImplHolder.<clinit> (Engine.java:186)
    at org.graalvm.polyglot.Engine.getImpl (Engine.java:438)
    at org.graalvm.polyglot.Engine$Builder.build (Engine.java:736)
    at org.graalvm.polyglot.Context$Builder.build (Context.java:1925)
    at org.graalvm.polyglot.Context.create (Context.java:979)
    at com.example.App.main (App.java:13)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:279)
    at java.lang.Thread.run (Thread.java:840)

问题原因

核心问题是GraalVM在Windows环境下处理路径时,生成了类Unix风格的路径格式/C:/...,而Windows文件系统不允许盘符前带斜杠,触发InvalidPathException异常。常见触发场景:

  • 使用Maven exec:java插件运行时,插件传递的类路径格式不符合Windows规范
  • GraalVM的类路径隔离机制在Windows下的路径解析存在兼容性问题

Windows环境配置与解决方法

方法1:禁用类路径隔离

修改Context创建逻辑,显式禁用类路径隔离,避免路径解析错误:

try ( Context context = Context.newBuilder()
        .allowAllAccess(true)
        .option("engine.ClassPathIsolation", "false") // 禁用类路径隔离
        .build() ){
    Value val = context.eval( "js", "10 + 2" );
    System.out.println( val.asInt() );
}

方法2:调整Maven exec插件配置

若通过Maven exec插件运行,在pom.xml中添加useProjectClasspath配置,确保类路径格式正确:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>com.example.App</mainClass>
        <useProjectClasspath>true</useProjectClasspath> <!-- 启用项目类路径 -->
    </configuration>
</plugin>

方法3:编译为原生镜像(可选)

若无需动态加载语言,可将程序编译为Windows原生镜像,彻底规避路径解析问题:

native-image -cp target/classes com.example.App

编译完成后直接运行生成的exe文件即可。

内容的提问来源于stack exchange,提问作者etchesketch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:25:31