# kmp-cli **Repository Path**: software-engineering-toolbox/kmp-cli ## Basic Information - **Project Name**: kmp-cli - **Description**: 一个支持全环境的 kotlin 开发的软件环境安装工具,基于 scoop 模式 - **Primary Language**: Kotlin - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-08 - **Last Updated**: 2026-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # KPM - Kotlin 包管理器 一个面向开发者的跨平台包管理器,受 Scoop 启发,使用 Kotlin 开发。 ## 特性 - 🚀 **原生可执行文件** - 无需 JVM 即可运行 - 🌍 **跨平台** - 支持 Windows、macOS 和 Linux - 📦 **包管理** - 安装、更新和管理开发工具 - 🔄 **版本管理** - 轻松切换不同版本的工具 - 🪣 **仓库系统** - 添加自定义仓库以获取更多软件包 - 🔗 **依赖解析** - 自动处理软件包依赖关系 - 💾 **持久化配置** - 配置在软件包更新后仍然保留 ## 安装 ### 预构建二进制文件 下载适合您平台的最新版本: | 平台 | 架构 | 下载 | |----------|--------------|----------| | Windows | x64 | `kpm-windows-x64.zip` | | macOS | x64/ARM64 | `kpm-macos-x64.tar.gz` / `kpm-macos-arm64.tar.gz` | | Linux | x64 | `kpm-linux-x64.tar.gz` | 解压并添加到 PATH: ```bash # Linux/macOS tar -xzf kpm-*.tar.gz sudo mv kpm /usr/local/bin/ # Windows (PowerShell) Expand-Archive kpm-*.zip Move-Item kpm.exe C:\Windows\ ``` ### 从源码构建 #### 前置条件 - **GraalVM JDK 21+** 包含 Native Image - **Gradle 8.5+** 安装 GraalVM: ```bash # 使用 SDKMAN sdk install java 21.0.1-graal sdk use java 21.0.1-graal # 安装 Native Image gu install native-image ``` #### 构建原生可执行文件 ```bash # 克隆仓库 git clone https://gitee.com/software-engineering-toolbox/kmp-cli.git cd kpm # 构建原生可执行文件 ./scripts/build-native.sh # 可执行文件位于: # ./kpm-app/build/native/nativeCompile/kpm ``` #### 使用 Docker 构建 ```bash docker build -t kpm-builder -f Dockerfile.native . docker run --rm -v $(pwd)/dist:/app/dist kpm-builder ``` #### 创建安装包(捆绑 JRE) ```bash # 需要 JDK 21+ 和 jpackage ./scripts/build-jpackage.sh --type=deb # Linux ./scripts/build-jpackage.sh --type=dmg # macOS ./scripts/build-jpackage.sh --type=msi # Windows ``` ## 使用方法 ### 基本命令 ```bash # 安装软件包 kpm install python kpm install node@18 kpm install go --force # 列出已安装的软件包 kpm list # 搜索软件包 kpm search python # 更新软件包 kpm update # 更新所有 kpm update python # 更新指定软件包 # 卸载软件包 kpm uninstall python kpm uninstall python --purge # 同时删除配置 # 显示软件包信息 kpm info python ``` ### 版本管理 ```bash # 列出可用版本 kpm versions python # 切换到指定版本 kpm reset python 3.9.5 # 锁定版本(防止更新) kpm hold python kpm unhold python ``` ### 仓库管理 ```bash # 列出仓库 kpm bucket list # 添加仓库 kpm bucket add extras https://gitee.com/software-engineering-toolbox/kpm-bucket-extras.git # 更新仓库 kpm bucket update kpm bucket update extras # 更新指定仓库 # 删除仓库 kpm bucket rm extras ``` ### 环境管理 ```bash # 导出已安装的软件包 kpm export packages.json # 在另一台机器上导入软件包 kpm import packages.json # 检查更新 kpm status # 诊断问题 kpm doctor ``` ## 项目结构 ``` kpm/ ├── kpm-core/ # 核心数据模型和接口 │ ├── model/ # 数据类(PackageManifest、Bucket 等) │ ├── service/ # 服务接口 │ ├── exception/ # 自定义异常 │ └── util/ # 工具类 │ ├── kpm-platform/ # 跨平台抽象层 │ ├── PlatformProvider.kt │ ├── WindowsPlatformProvider.kt │ ├── LinuxPlatformProvider.kt │ └── MacOSPlatformProvider.kt │ ├── kpm-repository/ # 仓库管理 │ └── BucketServiceImpl.kt │ ├── kpm-package/ # 软件包操作 │ └── PackageServiceImpl.kt │ ├── kpm-cli/ # 命令行界面 │ └── commands/ # CLI 命令 │ ├── kpm-app/ # 应用程序入口 │ ├── Main.kt │ └── resources/ │ └── META-INF/native-image/ # GraalVM 配置 │ └── scripts/ # 构建脚本 ├── build-native.sh ├── build-native.bat └── build-jpackage.sh ``` ## 原生镜像配置 项目包含预配置的 GraalVM 原生镜像设置: - `reflection-config.json` - 序列化的反射元数据 - `resource-config.json` - 需要包含在原生镜像中的资源 - `serialization-config.json` - 需要序列化的类 - `proxy-config.json` - 动态代理接口 ## 开发 ### 构建 ```bash # 构建所有模块 ./gradlew build # 构建 shadow JAR ./gradlew :kpm-app:shadowJar # 运行测试 ./gradlew test # 运行应用程序(需要 JVM) ./gradlew :kpm-app:run ``` ### 架构 ``` ┌─────────────────────────────────────────────────┐ │ CLI 模块 │ │ (Clikt 命令解析) │ └─────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ 服务层 │ │ PackageService │ BucketService │ ShimService │ └─────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ 平台抽象层 │ │ Windows │ Linux │ macOS 实现 │ └─────────────────────────────────────────────────┘ ``` ## 创建软件包 软件包清单是仓库中的 JSON 文件: ```json { "name": "mytool", "version": "1.0.0", "description": "一个有用的开发工具", "homepage": "https://example.com/mytool", "license": "MIT", "depends": ["python"], "platforms": { "windows": { "architecture": { "64bit": { "url": "https://example.com/mytool-1.0.0-win64.zip", "hash": "sha256:abc123..." } }, "bin": ["mytool.exe"] }, "linux": { "architecture": { "x86_64": { "url": "https://example.com/mytool-1.0.0-linux.tar.gz", "hash": "sha256:def456..." } }, "bin": ["bin/mytool"] }, "macos": { "architecture": { "arm64": { "url": "https://example.com/mytool-1.0.0-macos.tar.gz", "hash": "sha256:ghi789..." } }, "bin": ["bin/mytool"] } } } ``` ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE)。 ## 贡献 欢迎贡献!请在提交 PR 之前阅读我们的贡献指南。 1. Fork 仓库 2. 创建功能分支 3. 进行更改 4. 运行测试:`./gradlew test` 5. 提交 pull request