基于 Bun 的新一代跨语言构建工具,以 TypeScript 取代 XML,引领 Java 进入全栈时代。
A next-generation cross-language build tool powered by Bun. Replace XML with TypeScript, and lead Java into the full-stack era.
告别 pom.xml,让 Java 开发像前端一样简单。
我们相信 Java 开发者不应该被繁琐的 XML 配置所困扰。Qin 的目标是成为下一代 Maven,用现代化的开发体验重新定义 Java 项目管理。
- 🚀 零 XML 配置 - 使用 TypeScript 配置文件,类型安全,IDE 友好
- ⚡ 极速启动 - 基于 Bun 运行时,毫秒级响应
- 📦 Monorepo 支持 - 原生多项目管理,本地包自动解析
- 🔗 npm 风格依赖 -
"group:artifact": "^1.0.0"语法,支持 semver - 🎨 前端集成 - Spring Boot + 前端一体化开发
- 🎁 Fat Jar 打包 - 一键生成可执行 JAR
# 安装
bun install
# 初始化项目
qin init
# 开发模式
qin dev
# 构建
qin buildqin.config.ts:
import type { QinConfig } from "qin";
const config: QinConfig = {
name: "my-app",
// 依赖配置(npm 风格)
dependencies: {
"org.springframework.boot:spring-boot-starter-web": "3.2.0",
"my-local-lib": "^1.0.0", // 本地包
},
// Maven 仓库(默认阿里云镜像)
repositories: [
"https://maven.aliyun.com/repository/public",
],
};
export default config;my-workspace/
├── qin.config.ts # workspace 配置
├── apps/
│ └── web-app/ # 主应用
│ └── qin.config.ts
└── packages/
└── shared-lib/ # 共享库
└── qin.config.ts
Workspace 配置:
const config: QinConfig = {
name: "my-workspace",
packages: ["apps/*", "packages/*"],
};Qin 支持两种依赖存储模式:
// 全局存储(默认)- 依赖存放在 ~/.qin/libs/
export default defineConfig({
dependencies: { ... },
});
// 本地存储 - 依赖存放在项目 ./libs/ 目录(类似 node_modules)
export default defineConfig({
localRep: true, // 启用本地存储
dependencies: { ... },
});| 模式 | 存储位置 | 特点 |
|---|---|---|
| 全局(默认) | ~/.qin/libs/ |
多项目共享,节省空间 |
| 本地 | ./libs/ |
项目内可见,便于调试 |
| 命令 | 说明 |
|---|---|
qin init |
初始化新项目 |
qin dev |
启动开发服务器 |
qin run |
编译并运行 |
qin build |
构建 Fat Jar |
qin sync |
同步依赖 |
| 特性 | Maven | Qin |
|---|---|---|
| 配置格式 | XML | TypeScript |
| 类型检查 | ❌ | ✅ |
| 启动速度 | 慢 | 快 |
| Monorepo | 复杂 | 原生支持 |
| 前端集成 | 需要插件 | 内置 |
| 学习曲线 | 陡峭 | 平缓 |
- 运行时: Bun - 高性能 JavaScript 运行时
- 依赖解析: Coursier - 快速 Maven 依赖解析
- 配置加载: c12 - 支持多格式配置
- 版本匹配: semver - npm 语义化版本
- Glob 匹配: tinyglobby - 轻量 glob 库
# 安装依赖
bun install
# 运行测试
bun test
# 运行示例
cd examples/apps/hello-java
bun run ../../../src/cli.ts devMIT