不用 Lein/Boot 部署代碼到 Clojars

Clojure 部分代碼是按照 Java 生態的習慣打包發佈到 Maven 倉庫上面的.
做爲 npm 程序員, 我對 Maven 至關了解...
Clojars 是一個相似 Maven 的倉庫, 相對於 Maven, 更多包會發布在這裏.
通常要發佈 Clojure 或者 ClojureScript 模塊, 就是發佈到 Clojars.git

通常教程都是基於 Lein 或者基於 Boot 用 deploy 命令發佈,
可是對於不用 Lein 或者 Boot 的 cljs 開發者來講, 我就以爲挺不爽的.
那兩個東西啓動和部署太慢了, 因此一直在尋求替代方案嗎最後基於 cljs 快速冷啓動.程序員

原理

我在論壇上發了一個帖子求助: Feature request: release to Clojars with ClojureScriptgithub

有人給了比較精闢的回覆npm

I’ve been doing this with the clj cli. You can generate dependencies and paths into your pom.xml from deps.edn by running clj -Spom. Then run mvn deploy. Here’s an example pom.xml file for a project I published: https://github.com/protocol55...

我一開始沒有看, 後來反應過來, 就是要先有一個 pom.xml 文件, 而後 Maven 就能上傳了.
後面的回覆當中還有給了一個更詳細的教程, 具體到命令怎麼用: Clojure projects from scratchbash

首先由於是 Clojars, 須要填寫這邊的帳號密碼, 本地先加一個配置文件 ~/.m2/settings.xml:maven

<settings>
  <servers>
    <server>
      <id>clojars</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
</settings>

後面的步驟主要是 clj -Spom 能夠生成 pom.xml 文件. 最後就是 mvn deploy 了.
生成的 pom.xml 有幾個地方是須要手動修改的, 默認沒有 Clojars 的配置.
我不重複了, 戳上面的原文連接看細節.
我按着跑了一遍, 最後跑成功了. 忽然感受清晰了.ide

meyvn

而後我在想 pom.xml 是 XML 維護起來太麻煩了, 能不能用腳本處理一下,
想起來後面的回覆當中有人寫了 meyvn 這個工具.
是一個 Maven 的封裝的樣子. 忽然以爲可能就是作這個事情的.
Meyvn 依賴 clj 命令還有 mvn 命令, 因此須要 brew 提早安裝好.工具

安裝步驟的話, 首先在 $HOME/.clojure/deps.ednui

:aliases {:meyvn {:extra-deps {org.danielsz/meyvn {:mvn/version "1.0.5"}}}}

Clojars Project 注意版本號用最新的吧, 可能之後版本安裝方式會簡化一下.this

而後要找一下系統當中 Maven 的安裝路徑, 須要執行一些命令:

brew install coreutils
greadlink -f `which mvn` | awk '{gsub("bin/mvn", ""); print}'
# 獲得結果 /usr/local/Cellar/maven/3.5.4/

拿到安裝路徑以後, 在 /user/local/bin/ 建立一個命令 myvn:

touch /usr/local/bin/myvn
chmod +x /usr/local/bin/myvn

其中執行的腳本用到前面的路徑, 我這邊看起來簡單是這樣的:

#!/bin/sh
M2_HOME=/usr/local/Cellar/maven/3.5.4/ clj -A:meyvn -m meyvn.core "$@"

保存以後就有一個可執行的命令了. 而後就是須要一個 meyvn 的配置文件 meyvn.edn.
我看了下文檔沒寫清楚, 可是項目裏又一個神似的, 直接能夠抄:
https://github.com/danielsz/m...

{:pom {:group-id "org.danielsz",
       :artifact-id "meyvn",
       :version "1.0.5",
       :name "Better builds for Clojure"}
 :packaging {:jar {:enabled true
                   :remote-repository {:id "clojars"
                                       :url "https://clojars.org/repo"}}}
 :scm {:enabled true}}

這些完成以後, 運行 myvn deploy 就會開始代碼的打包和部署了.
除此運行會自動下載依賴, 不少的依賴, 個人文章都快碼完了, 依賴尚未下載完...
後面運行好一些, 可是冷啓動仍是挺慢, 最終完成發佈仍是須要十幾秒.
此外帳號密碼彷佛讀取的時候前面 Maven 的配置, 因此直接經過了.

其餘

無論怎樣, 整個方案是能夠用來替代 Boot 來進行發佈的.
實際上用 clj 加上 mvn 命令應該說能夠很快的, 但出維護性方面不知道怎麼辦.我暫時先用這個方案, 後面想辦法改進.Meyvn 的文檔其實應該說只有 README, 用到其餘配置我還得想一想.

相關文章
相關標籤/搜索