文章摘要: 如何将Python代码集成到Java项目中,实现两种语言共存。
整体打包分发方案的目录结构设计
- 建议将Python虚拟环境、源码与Java代码按以下结构组织,确保跨平台兼容性:
项目根目录/
├── src/ # Java项目目录
│ └── main/
│ └── java/ # Java源码(.java文件)
│ └── resources/ # 静态资源文件。
├── python/ # Python项目目录
│ ├── venv/ # 虚拟环境(含解释器和依赖)
│ └── src/ # Python源码(.py文件)
│ ├── requirements.txt/ # Pyhton第三方类库依赖清单
├── target/ # 构建输出目录(如JAR包)
└── pom.xml/ # Java的Maven配置文件
提示
推荐原因
- 构建工具兼容性:Maven/Gradle默认会编译
main/java下的代码,并打包main/resources中的资源。若将Python虚拟环境(含大量二进制文件)放入resources,会导致:打包产物体积急剧膨胀(虚拟环境通常数百MB),以及构建工具可能错误尝试解析非Java文件(如.pyc或.so库),引发构建失败。 - 运行时隔离性:Python虚拟环境需保持独立路径结构(如
venv/bin/python、venv/Lib/site-packages)。若嵌入resources,Java程序运行时需解压整个虚拟环境到临时目录,增加复杂度。 - 维护与分发便利性:独立目录便于通过
.gitignore排除虚拟环境(避免提交二进制文件),再次减少项目大小。
Java调用Python脚本
- 使用
ProcessBuilder通过相对路径调用项目内Python解释器。
// Windows示例
String pythonExe = "./python/venv/Scripts/python.exe";
String scriptPath = "./python/scripts/main.py";
ProcessBuilder pb = new ProcessBuilder(pythonExe, scriptPath);
pb.directory(new File(System.getProperty("user.dir"))); // 设置工作目录为项目根目录
Process p = pb.start();
- Linux/macOS需调整路径为
./python/venv/bin/python。