You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure项目CD发布Maven包:lein install与lein uberjar选哪个?

关于Clojure项目发布Maven包时lein install与lein uberjar的选择问题

1. 发布Maven包场景下应选用哪个命令?原因是什么?

应该选用lein install。原因如下:

  • Maven Registry的定位是分发供其他项目依赖的库,lein install会生成完全符合Maven规范的产物:仅包含项目自身编译代码和资源的普通jar包,以及清晰声明依赖项的pom.xml文件。其他项目依赖该包时,会通过Maven的依赖管理机制自动拉取所需的依赖,既避免了依赖冗余,也能防止类加载冲突。
  • lein uberjar的核心用途是生成可执行胖jar——它会把项目所有依赖打包进同一个jar文件,这类包是用来直接运行的,而非作为依赖库分发。如果将其发布到Registry,其他项目依赖时会引入重复的依赖类,引发冲突,还会大幅增加依赖包体积,破坏正常的依赖管理逻辑。

2. 使用lein install替代lein uberjar有何弊端?仅存在过度操作的问题吗?

在发布Maven包的场景下,用lein install替代lein uberjar几乎没有弊端,反而更符合规范。所谓的“过度操作”并不成立:lein install做的正是发布Maven包必需的核心操作——编译项目、生成标准jar和pom文件、安装到本地仓库(这通常是推送到远程Registry的前置步骤)。

反过来,如果错误地用lein uberjar替代lein install,才会出现诸多问题:生成的胖jar不符合Maven依赖包的标准格式,导致其他项目无法正确依赖;额外打包所有依赖会增加构建时间和包体积;pom文件可能无法被正确生成或上传,断裂依赖链。

3. 若cd.yml作为本地复现的硬编码文档,为保证最大可复现性,是否仍应选用lein install而非lein uberjar?

是的,**应该选用lein install**来保证最大可复现性:

  • lein install的行为贴合Maven生态的标准开发流程,所有熟悉Clojure/Maven的开发者都能快速理解其作用。本地复现时,执行lein install就能生成与CD流程完全一致的标准包产物,后续上传到本地仓库或远程Registry的步骤也和常规操作对齐。
  • 若选用lein uberjar,本地生成的是可执行胖jar,和CD流程要发布的Maven依赖包完全不是同一类型的产物,会误导开发者,无法复现正确的发布结果。

内容的提问来源于stack exchange,提问作者Pedro Delfino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:55:35