在Java 15应用中用GraalVM运行JS与Python的Pom依赖配置咨询
问题:在TomEE+Java15 Web应用中为GraalVM添加Python运行能力的依赖配置
我当前在基于TomEE运行的Java 15 Web应用中,使用GraalVM运行Javascript代码,运行状态良好。现在需要添加Python代码运行能力,想咨询pom.xml中需引入哪些依赖?我找到了org.graalvm.python相关依赖,当前pom已有如下依赖:
<dependency> <groupId>org.graalvm.js</groupId> <artifactId>js</artifactId> <version>22.1.0.1</version> </dependency> <dependency> <groupId>org.graalvm.js</groupId> <artifactId>js-scriptengine</artifactId> <version>22.1.0.1</version> </dependency>
是否需要从graal.js切换为graal.sdk,以实现用同一引擎运行Javascript或Python?
回答
一、需引入的Python相关依赖
在pom.xml中添加以下与当前GraalVM版本(22.1.0.1)一致的Python核心依赖和ScriptEngine适配依赖:
<dependency> <groupId>org.graalvm.python</groupId> <artifactId>python</artifactId> <version>22.1.0.1</version> </dependency> <dependency> <groupId>org.graalvm.python</groupId> <artifactId>python-scriptengine</artifactId> <version>22.1.0.1</version> </dependency>
二、是否需要切换为graal.sdk?
不需要替换现有graal.js依赖,建议补充引入graal-sdk来统一多语言引擎管理。graal-sdk提供了GraalVM多语言API的核心类(如Context),能让你通过同一套API创建和管理JavaScript、Python等不同语言的运行环境,避免依赖各语言的特定API。
添加以下同版本的graal-sdk依赖:
<dependency> <groupId>org.graalvm.sdk</groupId> <artifactId>graal-sdk</artifactId> <version>22.1.0.1</version> </dependency>
添加后可通过统一的Context API运行JS和Python代码,示例:
import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; // 创建支持JS和Python的上下文 try (Context context = Context.newBuilder("js", "python").build()) { // 执行JS代码 Value jsResult = context.eval("js", "1 + 2"); System.out.println("JS执行结果: " + jsResult.asInt()); // 执行Python代码 Value pyResult = context.eval("python", "1 + 2"); System.out.println("Python执行结果: " + pyResult.asInt()); }
三、关键注意事项
- 所有GraalVM相关依赖版本必须完全一致,避免版本冲突;
- 应用必须运行在GraalVM环境下,普通JDK无法支持Python等非JS语言的运行;
- 若继续使用ScriptEngine API,添加
python-scriptengine后,仍可通过ScriptEngineManager获取Python引擎,保持和原有JS引擎使用方式一致。
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

