不用 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, 用到其余配置我还得想一想.

相关文章
相关标签/搜索