使用 lein 來管理你本地的 maven repo

lein 已經成為開發 Clojure 程式的必備工具,最近在 GitHub 看到很方便的 lein 擴展 lein-localrepo ,使用他可以很簡單的將需要的 Java Libraries 加入到本地的 Maven repo

來複習一下傳統的作法

用 Clojure 寫 javafx 的 Hello World 一文有說到你可以使用以下的命 令將 javafx 加入到你本地的 Maven repo, 是不是覺得這個方法很麻煩?

mvn deploy:deploy-file -DgroupId=local.oracle -DartifactId=javafxrt \
    -Dversion=2.2.0 -Dpackaging=jar \
    -Durl=file:${HOME}/.m2/repository \
    -Dfile=/opt/oracle-jre-bin-1.7.0.17/lib/jfxrt.jar

使用 lein-localrepo 來簡化這麻煩的步驟

要讓 lein 有管理本地 repo 的功能,首先你需要在 ~/.lein/profiles.clj 加入以下資訊

{:user {:plugins [[lein-localrepo "0.5.0"]]}}

猜測 jar 的 Maven coordinates

這功能其實我不知道是做什麼的(汗),大體是取得這個檔案的資訊,使用以下 命令獲得該檔案的 Maven coordinates

lein localrepo coords <filename>

舉例來說

lein localrepo coords foo-bar-1.0.6.jar

你會得到以下輸出

foo-bar-1.0.6.jar foo-bar/foo-bar 1.0.6

安裝 jar 到本地 repo

安裝 jar 的命令很簡單,如果有需要 POM 文件,他會自動生出一個迷你板 的 POM 文件,命令格式如下

lein localrepo install [-r repo-path] [-p pom-file] <filename> <[groupId/]artifactId> <version>

具體使用範例

lein localrepo install foo-1.0.6.jar com.example/foo 1.0.6
lein localrepo install foomatic-1.3.9.jar foomatic 1.3.9
lein localrepo coords /tmp/foobar-1.0.0-SNAPSHOT.jar | xargs lein localrepo install

顯示本地端 Maven repo 安裝的 jar 資訊

你可以透過

lein localrepo list [-r repo-path] [-s | -f | -d]

來取得本地端安裝的 jar 資訊,舉例來說

lein localrepo list       # lists all artifacts, all versions
lein localrepo list -s    # lists all artifacts with description
lein localrepo list -f    # lists all artifacts and filenames
lein localrepo list -d    # lists all artifacts with detail

移除本地端的 jar 檔案 (目前尚無這功能)

作者似乎還沒將這個功能加上去,但是 GitHub 上的 Readme 已經有命令了,所 以我也將他列出來

你可以使用

lein localrepo remove <[groupId/]artifactId> [<version>]

來移除本地端的 jar 檔案,舉例來說

lein localrepo remove com.example/foo        # removes all versions
lein localrepo remove foomatic               # removes all versions
lein localrepo remove com.example/foo 1.0.3  # removes only specified version