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

如何将Python脚本与Jar文件整合打包 实现Java应用运行时正常调用

Java Jar包与Python脚本整合打包方案

核心实现思路

直接将Python脚本作为资源文件打入Jar包内部,运行时动态从Jar中读取脚本内容生成临时文件执行,完全不需要依赖系统固定目录配置。

具体操作步骤

  • 调整项目结构
    将所有需要用到的Python脚本统一放在项目的src/main/resources/python目录下,打包时这类资源文件会被自动打入Jar包内部,SpringBoot项目会存放在BOOT-INF/classes/python路径下,普通Jar项目会存放在根目录的python路径下。
  • 运行时读取资源生成临时脚本
    应用运行时通过类加载器读取Jar内的Python脚本资源,写入系统临时目录生成可执行的临时Python文件,可设置JVM退出时自动删除临时文件,无需人工清理。参考代码如下:
    import java.io.InputStream;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.StandardCopyOption;
    
    // 读取Jar包内的Python脚本资源
    InputStream scriptInputStream = getClass().getResourceAsStream("/python/your_target_script.py");
    // 生成后缀为.py的临时文件
    File tempPythonScript = Files.createTempFile("runtime_python_", ".py").toFile();
    // 配置JVM退出时自动删除临时文件
    tempPythonScript.deleteOnExit();
    // 将资源流写入临时文件
    Files.copy(scriptInputStream, tempPythonScript.toPath(), StandardCopyOption.REPLACE_EXISTING);
    
  • 调用临时脚本执行
    拿到临时脚本的绝对路径,直接通过ProcessBuilder调用执行即可:
    ProcessBuilder processBuilder = new ProcessBuilder("python3", tempPythonScript.getAbsolutePath());
    // 可按需配置工作目录、环境变量等
    Process runningProcess = processBuilder.start();
    

可选优化项

  • 如果Python脚本存在互相引用的情况,可以在应用启动时一次性将所有关联的Python脚本都解压到同一个临时目录下,避免相对路径引用报错。
  • 对于调用频率很高的脚本,只需在应用启动时解压一次重复使用即可,无需每次调用都生成新的临时文件,降低IO开销。
  • 可以给临时目录添加应用唯一标识,避免同一服务器上多实例运行时出现文件冲突。

轻量场景替代方案

如果使用的Python脚本逻辑很短、没有复杂的依赖和特殊字符,也可以直接读取脚本内容为字符串,通过python -c "脚本内容"的方式直接传给解释器执行,不需要生成临时文件,但该方案不适合长脚本和存在转义字符的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:08