2 个不稳定版本
0.2.0 | 2022 年 1 月 13 日 |
---|---|
0.1.0 | 2021 年 11 月 23 日 |
#1817 in 开发工具
68KB
1.5K SLoC
jcargo
尝试为 JVM 生态系统创建一个与 Rust 的优秀构建工具等效的工具。
动机
Maven 很糟糕,谁想写 XML。Gradle 是朝着正确方向迈出的一步,但使用它需要学位(并且它需要一个进程守护程序来隐藏它痛苦地慢的事实)。
Jcargo 不在 JVM 上运行,它没有漫长的启动时间(这对于 CLI 是必不可少的)。它附带我的另一个项目:[https://github.com/Gui-Yom/native-jdktools](https://github.com/Gui-Yom/native-jdktools),尝试用 GraalVM 编译 JDK 工具(javac、javadoc、jar 等)以改善启动时间。
Jcargo 从单个 jcargo.toml
文件进行配置,该文件易于编写和阅读。它遵循“简单且足够高效以满足 90% 的用例”的原则,对于剩余的 10%,我们可能需要构建脚本或其他东西(稍后探讨)。
对于 90% 的用例,您只需要启动一个项目,该项目可以拉取一些依赖项而无需进行任何特殊处理。
当前状态
该项目在实际上应用于任何真实事物方面还非常遥远。它可以成功编译没有依赖项的项目。
安装
下载预构建的二进制文件
请参阅发布页面。
从源代码构建
需要至少 Rust 1.56
。
从 crates.io(发布版本)
cargo install jcargo
从 master 分支
git clone https://github.com/Gui-Yom/jcargo
cd jcargo
cargo install --path .
运行时
目前,JDK_HOME/bin
必须在您的路径中,以便 jcargo 能够找到 JDK 工具。如果您想编译 Kotlin 源代码,请将 KOTLINC_HOME
设置为指向 kotlinc 的安装目录。
使用 native-jdktools
如果您正在使用 native-jdktools,请将 NATIVE_JDKTOOLS
设置为指向 native-jdktools 可执行文件。还请将 JDKTOOLS_HOME
设置为 JDK 主目录。
配置
配置肯定没有冻结。我特别不喜欢依赖项的指定方式。示例
group = "marais"
artifact = "testproject"
version = "0.1.0"
[dependencies]
# Compile and runtime dependencies
compileRuntime = [
"org.apache.logging.log4j:log4j-api:2.17.1"
]
# Runtime only dependencies
runtime = [
{ group = "org.apache.logging.log4j", artifact = "log4j-core", version = "2.17.1" }
]
# Compile only
compile = []
transitive = []
[[entrypoints]]
class = "Main"
[[entrypoints]]
name = "Other"
class = "OtherMain"
设计
阅读jcargo 的一些设计。
1.0 版本路线图
-
表示功能部分实现,尚未完全完成
-
表示功能完全不存在
-
项目模型、配置和管理
- 稳定配置模型(TOML)
- 项目初始化(jcargo init)
- 创建初始配置文件
- 项目清理(jcargo clean)
- 删除
target
目录
- 删除
- 一致性检查(jcargo check)
- 验证配置文件
- 下载依赖
- 检查依赖版本
- 依赖处理
- 标准 Maven 二进制仓库
- Maven pom 解析
- 递归合并 poms
- 下载完整的依赖树
- Gradle 元数据?
- 自定义二进制仓库
- Git 依赖(使用 jcargo 制成的项目)
- 本地依赖(使用 jcargo 制成的项目)
- 依赖缓存
- 缓存 pom 和 jar
- 缓存 Maven 元数据
- 缓存依赖图解析
- 验证文件哈希值
- 标准 Maven 二进制仓库
- 多个源集
- 主程序
- 测试
- 示例
- 基准测试?
- 每个源集的依赖
- 多模块构建
- 模块间依赖
-
Java 支持
- 编译
- Javadoc 生成
- 注解处理
- 工具链处理
- 处理源和目标版本
- 处理多个 JDK 安装
-
Kotlin 支持
- JVM 编译支持
- Kdoc 生成
- 注解处理
- 工具链处理
- 处理源和目标版本
- 处理多个 kotlinc 和 JDK 安装
-
打包
- 应用程序 jar
- 文档 jar
- 源码 jar
- 源码 tarball
- 资源处理
- 依赖打包选项
- 发布到二进制仓库
- Maven 的 POM 生成
- Gradle 模块元数据生成
- 远程仓库发布
-
IDE 支持
- IntelliJ IDEA 集成
- 配置文件支持
- 完整类路径支持
- IntelliJ IDEA 集成
其他想法
- 错误信息处理,美化 javac 命令行错误信息。
依赖
~12–25MB
~380K SLoC