jip:克隆Java项目即可运行,摆脱Maven与Gradle的繁琐配置
我为什么创建 jip
这个项目始于一个简单的挫败感,而不是一个要重新发明 Java 开发的宏大计划。
我相信你偶尔会从 GitHub 克隆 Java 项目,用来验证一个想法、探索某个库,或者看看别人是怎样解决问题的。我也会这么做。而有一件事让我越来越沮丧:我常常不能直接开始看代码,反而为了把项目跑起来,不得不和 Maven 或 Gradle 较劲。
你克隆了一个仓库,想要做点实验。结果却要弄清楚构建配置、插件、依赖声明、包装脚本,以及项目所需的其他各种东西。你并不一定每台机器上都安装了 Maven 或 Gradle,而修改或添加依赖,可能让一次快速实验变成比实验本身还多的工作。
Rust 让我看到,当这些问题被整合进开发工作流时,可以处理得多么干净利落。我想把这种简洁性的一部分带到 Java 中:直截了当的依赖管理、可读的配置,以及不碍事的工具。
这就是我创建 jip 的原因:一个简单的工具,用来克隆 Java 项目、解析依赖并运行代码,而不会把一次快速实验变成构建系统练习。
目标很简单:在发现一个 Java 项目和真正使用它之间,减少障碍。
为什么 Java 不能有更简单的方式?
我使用其他编程语言的时间越长,就越欣赏它们处理依赖管理的方式。
Python 有 pip,以及一种直截了当的依赖声明方式。Rust 有 Cargo,具备清晰的项目清单、依赖解析,以及用于可复现构建的锁文件。
而 Java 有 Maven 和 Gradle。两者都很强大,对复杂项目很有用,但如果只是试跑代码,它们会显得没必要地复杂。
为什么我只是测试和调整一个小型 Java 项目,就需要理解整个构建系统?
我想要一种更接近 Rust 体验的方式:紧凑的依赖文件、可预测的工作流,以及一个管理基本事项的单一工具。
这个想法最终变成了 jip。
jip 是什么?
jip 是一个轻量级、受 pip 启发的 Java 依赖管理器和运行器。 它以单个二进制文件的形式分发,使用精简的 jip.toml 配置文件,而不需要为日常开发准备复杂的构建配置。
基本工作流很直接:
无需安装 Maven 或 Gradle。jip 会处理依赖,这样你就可以专注于探索代码,而不是和构建系统较劲。
jip 会解析依赖、在需要时编译 Java 源码、检测主类,并运行应用程序。
你也可以使用 jip get 克隆仓库,并自动将检测到的 Maven 或 Gradle 配置转换为 jip.toml 文件。执行仍然是一个独立且明确的步骤,因此你可以在运行前检查代码。
目标很简单:把时间花在探索 Java 代码上,而不是研究如何启动它。
紧凑的依赖配置
jip 不使用庞大的构建配置,而是用 TOML 描述项目所需的依赖。
例如:
该配置将运行时依赖与测试依赖分开。jip 还支持仅编译依赖、自定义仓库,以及一个 jip.lock 文件,用于固定已解析的依赖版本。
最终得到的配置易于阅读、理解和维护。
不仅仅是依赖
虽然最初的动机是让 GitHub 项目更容易运行,但 jip 已经发展成一套实用的 Java 开发工具集合。
它的一些功能包括:
- 依赖管理: 添加、移除、更新和检查依赖。
- 构建与执行: 编译项目、检测主类并运行应用程序。
- GitHub 工作流: 克隆仓库,并转换受支持的 Maven 和 Gradle 配置。
- 可复现性: 锁定已解析的依赖版本,并支持使用缓存依赖进行离线执行。
- 测试: 编译并运行 JUnit 测试。
- 打包: 构建标准 JAR,或包含所有依赖的自包含可执行 fat JAR。
- JDK 管理: 安装、列出、选择和移除来自受支持供应商的 JDK 安装。
- 项目维护: 检查依赖树、查找过时的包,并查看依赖元数据。
- 多模块项目: 检测受支持的 Maven 和 Gradle 模块结构,并按依赖顺序构建模块。
当所需构件已经可用时,jip 还可以复用本地 Maven 缓存中的依赖,从而减少不必要的下载。
jip 是要取代 Maven 和 Gradle 吗?
未必适用于每个项目。
Maven 和 Gradle 拥有成熟的生态系统,支持复杂的构建流水线、自定义插件和复杂的企业需求。jip 并不试图复现这些系统的每一项能力。
它的重点不同:让 Java 开发和实验更简单、更快速,并且更少依赖构建系统的复杂性。
如果你维护的是一个构建要求复杂的大型生产项目,那么现有构建系统可能仍是正确选择。
但如果你经常克隆仓库、评估库、测试想法,或者构建较小的 Java 应用程序,jip 提供了一种直接得多的工作流。
你也可以使用 jip init 将受支持的 Maven 和 Gradle 配置转换为 jip 的格式。原始构建文件保持不变,因此你可以尝试这种替代方案,而无需承诺迁移。
试试看
jip 是开源的,可在 GitHub 上获取:
github.com/autumoswitzerland/jip
jip 用 Rust 编写,并提供适用于不同平台的预构建二进制文件,因此你不需要自己编译源代码。下载适合你平台的发行版,安装后即可开始探索 Java 项目,而无需经历通常的 Maven 或 Gradle 麻烦。