从一次性执行命令到日常使用,命令行工具是软件工程师工具带中必不可少的部分。 每种流行的编程语言都有一个至少用于参数解析的框架,但是大多数语言还提供满足更复杂要求(例如提示或彩色输出)的组件。 但是,CLI的部署是语言生态系统不同的地方。
The Problem with JVM CLIs
是否想用Javascript编写CLI? 简单! 只需选择一些库,将您的想法转换为代码,上载到npm(或任何其他程序包注册表),就一切就绪。 现在,任何人都可以在npx的帮助下部署和使用CLI。
现在,JVM呢? 您选择一些库,编写代码,然后将工件上传到Maven注册表。 如果您正在编写Javascript库,那么您会不计其数在npmjs.com上的下载。 但是,对于JVM CLI则不是。 没有用于下载和执行maven存储库中的可运行JAR的标准工具。 因此,尽管您的工件普遍可用,但是要获得并执行CLI仍需要花费大量精力。
Enter mvnx
在过去的几个月里编写了一些Kotlin CLI,我决定接受这种情况。 我创建了mvnx,它大胆地宣称要解决maven存储库中可用的JAR的执行:
https://github.com/mvnx/mvnx
受npx启发,mvnx获取工件的maven坐标并处理其余部分。 看:
如果您不想强制使用特定版本,则可以完全省略版本坐标! 在这种情况下,mvnx将获取最新版本。
$ mvnx -q com.github.ricksbrown:cowsay "Hello, World"
默认情况下,mvnx将查询中央存储库。 您可以通过指定支持HTTP Basic身份验证凭据和别名的自定义存储库URL来更改此行为。
专业提示:mvnx喜欢GitHub软件包!
Wrapping Up
JVM生态系统提供了大量优秀的库,以及稳定的依赖项管理解决方案。 在这些基础之上,CLI易于编写和分发,但难以获取和执行。 mvnx的目标是成为CLI创建者和使用者之间缺少的链接。