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

如何在Leiningen中仅将指定依赖打包至输出Jar文件

解决Leiningen仅打包指定依赖到Uberjar的问题

要实现仅将com.github.freeze-dolphin/clamp打包进Uberjar,同时排除其他三个provided级别的依赖,你需要调整project.clj的配置,利用Leiningen的profile和依赖scope机制,具体方案如下:

正确配置示例

(defproject dumortierite "0.1.0-SNAPSHOT"
  ;; 保留其他原有配置(如:source-paths、:main等)
  :dependencies [[com.github.freeze-dolphin/clamp "4ddd923dcb"]]
  
  :profiles {
    :dev {
      ;; 开发环境所需的依赖,仅在本地开发时生效(如repl、测试)
      :dependencies [
        [org.clojure/clojure "1.11.1"]
        [io.papermc.paper/paper-api "1.19.3-R0.1-SNAPSHOT"]
        [com.github.StarWishsama/Slimefun4 "2023.02"]
      ]
    }
    :provided {
      ;; 标记为provided的依赖,运行时由宿主环境(如PaperMC服务器)提供
      :dependencies [
        [org.clojure/clojure "1.11.1" :scope "provided"]
        [io.papermc.paper/paper-api "1.19.3-R0.1-SNAPSHOT" :scope "provided"]
        [com.github.StarWishsama/Slimefun4 "2023.02" :scope "provided"]
      ]
    }
  }
  
  ;; 关键配置:让uberjar任务激活:provided profile,自动排除该profile下的依赖
  :uberjar {:profiles [:provided]}
)

配置说明

  1. 主依赖项:仅保留需要打包的clamp,默认compile scope,会被自动包含进Uberjar。
  2. :dev Profile:存放开发时需要的依赖,确保本地开发(如lein repl、lein test)正常运行,不影响最终打包结果。
  3. :provided Profile:将运行时由宿主环境提供的依赖标记为:scope "provided",Leiningen会自动排除这类依赖的打包。
  4. :uberjar 配置:通过:profiles [:provided]指定构建Uberjar时激活该profile,确保provided依赖被正确识别和排除。

常见问题解释

  • 之前执行jar命令无依赖:lein jar仅打包项目自身代码,不会包含任何依赖,若需打包依赖必须使用lein uberjar。
  • 之前uberjar包含全部依赖:未正确激活:provided profile,导致Leiningen将这些依赖视为compile scope,从而打包进Uberjar。

备选方案(直接排除)

如果不想使用profile,也可以通过:uberjar-exclusions直接指定要排除的依赖,但这种方式需要手动编写匹配规则,灵活性较差:

:uberjar-exclusions [#"org/clojure/clojure.*" #"io/papermc/paper.*" #"com/github/StarWishsama/Slimefun4.*"]

内容的提问来源于stack exchange,提问作者Freeze Dolphin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:46