Leiningen构建工具 #
一、Leiningen简介 #
Leiningen是Clojure最流行的构建工具和项目管理工具,类似于Java的Maven或Node.js的npm。
1.1 主要功能 #
- 项目创建
- 依赖管理
- 编译构建
- 测试运行
- 打包部署
1.2 安装 #
bash
brew install leiningen
lein version
二、项目创建 #
2.1 创建新项目 #
bash
lein new my-project
lein new app my-app
lein new plugin my-plugin
lein new template my-template
2.2 项目结构 #
text
my-project/
├── project.clj
├── README.md
├── resources/
├── src/
│ └── my_project/
│ └── core.clj
└── test/
└── my_project/
└── core_test.clj
2.3 project.clj #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:description "My Clojure Project"
:url "https://example.com"
:license {:name "MIT"
:url "https://opensource.org/licenses/MIT"}
:dependencies [[org.clojure/clojure "1.11.1"]]
:main my-project.core)
三、依赖管理 #
3.1 添加依赖 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.1"]
[ring/ring "1.9.6"]
[compojure/compojure "1.6.2"]
[cheshire/cheshire "5.11.0"]])
3.2 开发依赖 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.1"]]
:profiles {:dev {:dependencies [[midje "1.10.5"]
[clj-kondo "2023.01.20"]]}})
3.3 查看依赖树 #
bash
lein deps :tree
lein deps :tree :profiles
3.4 检查过期依赖 #
bash
lein ancient
四、常用命令 #
4.1 运行 #
bash
lein run
lein run -m my-project.core
lein run -m my-project.core arg1 arg2
4.2 REPL #
bash
lein repl
lein repl :headless
lein repl :connect
4.3 测试 #
bash
lein test
lein test my-project.core-test
lein test :only my-project.core-test/test-name
4.4 编译 #
bash
lein compile
lein clean
lein uberjar
4.5 检查 #
bash
lein check
lein lint
五、配置详解 #
5.1 基本配置 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:description "Project description"
:url "https://example.com"
:license {:name "MIT"
:url "https://opensource.org/licenses/MIT"}
:dependencies [[org.clojure/clojure "1.11.1"]]
:source-paths ["src"]
:test-paths ["test"]
:resource-paths ["resources"])
5.2 JVM选项 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:jvm-opts ["-Xmx1g" "-server"]
:javac-options ["-target" "11" "-source" "11"])
5.3 主函数 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:main my-project.core)
5.4 全局配置 #
~/.lein/profiles.clj:
clojure
{:user {:plugins [[lein-ancient "0.7.0"]
[lein-cljfmt "0.8.0"]]
:dependencies [[clj-kondo "2023.01.20"]]}}
六、Profiles #
6.1 定义Profiles #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.1"]]
:profiles {:dev {:dependencies [[midje "1.10.5"]]
:source-paths ["dev"]}
:test {:dependencies [[clj-test "0.4.0"]]}
:uberjar {:aot :all}})
6.2 使用Profiles #
bash
lein with-profile dev repl
lein with-profile test test
lein with-profile uberjar uberjar
6.3 合并Profiles #
bash
lein with-profile dev,test test
七、插件 #
7.1 安装插件 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:plugins [[lein-ring "0.12.1"]
[lein-cljfmt "0.8.0"]])
7.2 常用插件 #
| 插件 | 用途 |
|---|---|
| lein-ring | Web应用 |
| lein-cljfmt | 代码格式化 |
| lein-kibit | 代码优化建议 |
| lein-ancient | 检查过期依赖 |
| lein-codox | 文档生成 |
7.3 插件配置 #
clojure
(defproject my-project "0.1.0-SNAPSHOT"
:plugins [[lein-ring "0.12.1"]]
:ring {:handler my-project.handler/app
:port 3000})
八、打包部署 #
8.1 JAR打包 #
bash
lein jar
lein uberjar
8.2 运行JAR #
bash
java -jar target/my-project-0.1.0-standalone.jar
8.3 部署到Clojars #
clojure
(defproject my-project "0.1.0"
:description "My Library"
:url "https://example.com"
:license {:name "MIT"}
:dependencies [[org.clojure/clojure "1.11.1"]]
:repositories [["clojars" "https://clojars.org/repo"]])
bash
lein deploy clojars
九、实践示例 #
9.1 Web项目 #
clojure
(defproject web-app "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.1"]
[ring "1.9.6"]
[compojure "1.6.2"]
[hiccup "2.0.0-RC1"]]
:plugins [[lein-ring "0.12.1"]]
:ring {:handler web-app.handler/app}
:profiles {:dev {:dependencies [[ring/ring-mock "0.4.0"]]}})
9.2 库项目 #
clojure
(defproject my-lib "0.1.0"
:description "A useful library"
:url "https://github.com/user/my-lib"
:license {:name "MIT"
:url "https://opensource.org/licenses/MIT"}
:dependencies [[org.clojure/clojure "1.11.1"]]
:profiles {:dev {:dependencies [[clj-test "0.4.0"]]}})
9.3 命令行工具 #
clojure
(defproject cli-tool "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.11.1"]
[cli-matic "0.4.3"]]
:main cli-tool.core
:uberjar-name "cli-tool.jar"
:profiles {:uberjar {:aot :all}})
十、常见问题 #
10.1 依赖冲突 #
bash
lein deps :tree
lein deps :check
10.2 缓存清理 #
bash
lein clean
rm -rf .lein-deps-sum
rm -rf .cpcache
10.3 版本问题 #
bash
lein version
lein upgrade
十一、总结 #
Leiningen常用命令:
| 命令 | 用途 |
|---|---|
lein new |
创建项目 |
lein run |
运行项目 |
lein repl |
启动REPL |
lein test |
运行测试 |
lein uberjar |
打包 |
lein deps :tree |
查看依赖 |
关键点:
- Leiningen是Clojure标准构建工具
- project.clj是项目配置核心
- Profiles管理不同环境配置
- 插件扩展功能
- uberjar打包独立应用
下一步,让我们学习项目结构与实践!
最后更新:2026-03-27