为何执行lein install需前缀LEIN_SNAPSHOTS_IN_RELEASE=true?
Leiningen中
LEIN_SNAPSHOTS_IN_RELEASE=true的作用、问题原因与设计背景 为什么直接执行lein install会报错?
- 你的项目版本是正式版(不带SNAPSHOT后缀),但项目的依赖链里存在SNAPSHOT版本的依赖——可能是你直接在
project.clj里声明的,也可能是某个依赖的传递依赖。 - Leiningen的默认校验规则会拦截这种情况:正式发布版的项目不应该依赖未稳定的快照版,因为快照版内容随时可能变更,会导致正式版的构建结果无法重复、行为不稳定。
LEIN_SNAPSHOTS_IN_RELEASE=true的必要性是什么?
- 这个环境变量是用来临时绕过Leiningen的默认校验,允许正式版项目依赖快照版依赖。
- 只有当你确实需要在正式版项目中引入快照依赖时才需要用它:比如某个功能只有快照版支持、内部项目依赖还没正式发布但要提前集成、或者测试阶段需要验证快照依赖的兼容性。
- 注意:这是临时方案,绝对不建议在生产环境的正式发布流程中使用,会破坏正式版项目的可复现性和稳定性。
这个校验规则的设计背景
- 这套逻辑是遵循Maven/Java生态的发布规范:正式发布版(Release Version)必须依赖稳定的正式版依赖,快照版(Snapshot Version)仅用于开发过程中的临时迭代。
- 规范的核心目的是保障正式发布软件的可靠性:快照版依赖没有固定的版本内容,今天构建的正式版和明天构建的可能因为依赖更新出现差异,这对生产环境是极大的风险。
- 提供
LEIN_SNAPSHOTS_IN_RELEASE=true开关,是为了给开发者留足灵活空间,应对特殊的开发或测试场景,而非否定这套规范的合理性。
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

