diff --git a/parser/pom.xml b/parser/pom.xml index e616cfc..bc9b0f8 100644 --- a/parser/pom.xml +++ b/parser/pom.xml @@ -119,11 +119,6 @@ ${graalpy.version} pom - - org.graalvm.python - python-embedding - ${graalpy.version} - diff --git a/parser/src/main/java/cn/qaiu/parser/custompy/PyContextPool.java b/parser/src/main/java/cn/qaiu/parser/custompy/PyContextPool.java index 2e97ffe..73b3655 100644 --- a/parser/src/main/java/cn/qaiu/parser/custompy/PyContextPool.java +++ b/parser/src/main/java/cn/qaiu/parser/custompy/PyContextPool.java @@ -134,28 +134,22 @@ public class PyContextPool { private PyContextPool() { log.info("初始化GraalPy Context池..."); - // 创建共享Engine - 优先使用 GraalPyResources + // 创建共享Engine - 使用标准Polyglot API Engine engine = null; try { - // 使用 GraalPyResources 创建,这是推荐的方式 - var tempContext = org.graalvm.python.embedding.GraalPyResources.contextBuilder() + engine = Engine.newBuilder() .option("engine.WarnInterpreterOnly", "false") .build(); - engine = tempContext.getEngine(); - tempContext.close(); - log.info("Engine创建成功(GraalPyResources模式)"); - } catch (Exception e) { - log.warn("GraalPyResources模式创建Engine失败,尝试标准方式: {}", e.getMessage()); - try { - engine = Engine.newBuilder() - .option("engine.WarnInterpreterOnly", "false") - .build(); - log.info("Engine创建成功(标准模式)"); - } catch (Exception e2) { - log.error("标准模式创建Engine也失败: {}", e2.getMessage()); - checkGraalPyAvailability(); - throw new RuntimeException("无法初始化GraalPy Engine,请确保GraalPy依赖正确配置", e2); + + // 验证Python语言是否可用 + if (!engine.getLanguages().containsKey("python")) { + throw new IllegalStateException("Python语言不可用,请检查GraalPy依赖配置"); } + log.info("Engine创建成功,可用语言: {}", engine.getLanguages().keySet()); + } catch (Exception e) { + log.error("创建Engine失败: {}", e.getMessage()); + checkGraalPyAvailability(); + throw new RuntimeException("无法初始化GraalPy Engine,请确保GraalPy依赖正确配置", e); } this.sharedEngine = engine; @@ -279,9 +273,9 @@ public class PyContextPool { .option("python.ForceImportSite", "false") .build(); } catch (Exception e) { - log.warn("使用共享Engine创建Context失败,尝试使用GraalPyResources: {}", e.getMessage()); - // 使用 GraalPyResources 作为备选 - context = org.graalvm.python.embedding.GraalPyResources.contextBuilder() + log.warn("使用共享Engine创建Context失败,尝试不使用共享Engine: {}", e.getMessage()); + // 不使用共享Engine作为备选 + context = Context.newBuilder("python") .allowHostAccess(HostAccess.newBuilder(HostAccess.EXPLICIT) .allowArrayAccess(true) .allowListAccess(true) @@ -298,6 +292,9 @@ public class PyContextPool { .allowHostFileAccess(false) .allowHostSocketAccess(false) .build()) + .option("engine.WarnInterpreterOnly", "false") + .option("python.PythonHome", "") + .option("python.ForceImportSite", "false") .build(); } @@ -484,24 +481,28 @@ public class PyContextPool { Class.forName("org.graalvm.python.embedding.GraalPyResources"); log.info("✓ org.graalvm.python.embedding.GraalPyResources 类存在"); } catch (ClassNotFoundException e) { - log.error("✗ org.graalvm.python.embedding.GraalPyResources 类不存在 - 缺少 python-embedding 依赖"); + log.warn(" python-embedding 类不存在(可选依赖)"); } // 尝试列出可用语言 try { - log.info("尝试使用 GraalPyResources 创建 Context..."); - var context = org.graalvm.python.embedding.GraalPyResources.createContext(); - log.info("✓ GraalPyResources 创建 Context 成功"); - context.close(); + log.info("尝试使用标准 Polyglot API 创建 Context..."); + try (Engine engine = Engine.create()) { + log.info(" 可用语言: {}", engine.getLanguages().keySet()); + if (engine.getLanguages().containsKey("python")) { + log.info("✓ Python 语言可用"); + } else { + log.error("✗ Python 语言不可用"); + } + } } catch (Exception e) { - log.error("✗ GraalPyResources 创建 Context 失败: {}", e.getMessage()); + log.error("✗ 创建 Engine 失败: {}", e.getMessage()); } log.error("================================"); log.error("请检查以下依赖是否正确配置:"); log.error(" 1. org.graalvm.polyglot:polyglot"); log.error(" 2. org.graalvm.polyglot:python (type=pom)"); - log.error(" 3. org.graalvm.python:python-embedding"); log.error("================================"); }