通过python运行java,会自动下载java运行环境
Project description
JavaJar - Python Java Runner with Auto JDK Management
JavaJar 是一个 Python 工具,可以通过 Python 运行 Java JAR 文件,并自动下载和管理 Java 运行环境。它支持本地 JAR 文件执行和 Maven 仓库依赖解析。
解决什么问题?
目前大多数本地(local)MCP 服务器基于 Node.js 或 Python 开发,因为它们可以通过 npx 或 uvx 命令快速配置并启动。
而 Java 编写的 MCP 通常以远程(remote)服务器形式运行,通过 SSE 提供服务,几乎没有采用 stdio 方式交互的本地实现,主要原因是 JRE 需要额外安装和手动配置。
本项目通过自动化管理 Java 运行环境,实现了类似 npx、uvx 的便捷体验,使基于 Java 的本地 MCP 服务器也能一键启动。
功能特性
- 🚀 自动 JDK 管理: 自动检测、下载和安装所需的 Java 版本
- 📦 Maven 支持: 直接从 Maven 仓库下载并运行 JAR 文件,基于spring boot的 mcp 可以build为一个jar文件部署到仓库
- 📋 环境列表: 查看系统中所有可用的 Java 版本
使用案例
配置local mcp server:
- 自动配置JDK: 其中
javajar会检测 本地是否安装 jdk 17,如果没有会自动下载安装。 - 下载jar: 从配置的maven仓库下载 maven 组件。
mcp server配置完成效果:
安装与使用
使用 uvx javajar 命令运行,javajar 组件提供了 2 个命令。
-
javajar run: 运行 JAR 文件 -
javajar java-lsit: 列出系统中所有可用的 Java 版本
java-list命令比较简单,列出 javajar 组件能够识别和管理的java版本
➜ ~ uvx javajar java-list
检查到以下可用的java版本
17.0.14 -> /Users/yanglikun/.jenv/versions/17/bin/java
17.0.14 -> /Users/yanglikun/.jenv/shims/java
17.0.17 -> /Users/yanglikun/.ylk_javajar/jdkinstall/17/bin/java
1.8.0_472 -> /Users/yanglikun/.ylk_javajar/jdkinstall/8/bin/java
21.0.9 -> /Users/yanglikun/.ylk_javajar/jdkinstall/21/bin/java
javajar run 运行jar
运行jar有两种方式,一种是本地的jar,一种是maven仓库的jar。
本地jar
{
"ylk-java-mcp": {
// mcp工具名称,随意修改
"command": "uvx",
"args": [
"javajar",
"run",
"--jar=/Users/yanglikun/workspace/ai/ylk-stdio-mcp-java/target/ylk-mcp-stdio-java-0.0.1-SNAPSHOT.jar",
"--jar-args=--amap.key=xxx"
],
"disabled": false,
"autoApprove": []
}
}
--jar=xx.jar:配置jar的绝对地址
--jar-args: 配置jar的参数,比如spring @Value("${amap.key}")占位符,都可以在这里指定。
maven仓库的jar
{
"ylk-java-mcp": {
"command": "uvx",
"args": [
"javajar",
"run",
"--maven=com.jd.ylk.ai:ylk-mcp-stdio-java:0.0.1-SNAPSHOT",
"--release-repo=https://artifactory.jd.com/libs-releases",
"--snapshot-repo=http://artifactory.jd.com/libs-snapshots",
"--jar-args=--amap.key=xxx"
],
"disabled": false,
"autoApprove": []
}
}
和本地jar不同的是 需要指定 maven 坐标 和 仓库地址。默认是从 maven的中心仓下载:https://repo1.maven.org/maven2
--maven=com.jd.ylk.ai:ylk-mcp-stdio-java:0.0.1-SNAPSHOT: maven坐标
--release-repo=https://artifactory.jd.com/libs-releases: 配置maven release仓库地址,默认从maven central仓库下载
--snapshot-repo=http://artifactory.jd.com/libs-snapshots: 配置maven snapshots仓库地址,默认从maven central仓库下载
其它参数
java_version=17: 指定java版本,默认是17。可以根据需要指定,也可以配置 17+代表至少要 jdk17。
jdk和jar在那里
自动下载的jdk和从maven仓库下载的jar在本地哪里呢?
- jdk 在
~/.ylk_javajar/jdkinstall目录下 - jar 在
~/.ylk_javajar/jars目录下
开发
项目结构
javajar/
├── src/javajar/
│ ├── __init__.py
│ ├── __main__.py
│ ├── cli.py # 命令行接口
│ ├── java_runner.py # JAR 执行逻辑
│ ├── jdk_manager.py # JDK 管理
│ ├── java_list.py # Java 版本列表
│ └── maven_resolver.py # Maven 依赖解析
├── tests/ # 测试文件
├── pyproject.toml # 项目配置
└── README.md
下载和构建
git clone <repository-url>
uv sync
贡献
欢迎提交 Issue 和 Pull Request!
支持
如有问题,请在 GitHub Issues 中提交。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file javajar-0.3.3.tar.gz.
File metadata
- Download URL: javajar-0.3.3.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3dc732055e53a2e28cc06cc1a040bfae9776e4f4d30f9a015916d6b86389848
|
|
| MD5 |
99012ed49eb776aaa05b79d5db370c97
|
|
| BLAKE2b-256 |
f2f98cbb7c047604c278ff889ddcb94eb30c7747dd25db33dc2e9e8ceafd4ccf
|
File details
Details for the file javajar-0.3.3-py3-none-any.whl.
File metadata
- Download URL: javajar-0.3.3-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9ebd7ea76a035008379eefcb413952ef17614e7e9df1a43eefb02cca8689b99
|
|
| MD5 |
01b482105a521c3c9570338d8e548868
|
|
| BLAKE2b-256 |
77b43131a98442322ea726bda0a2c93dca76d99e4d3114d42b35d0eb5e61f432
|