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 yourpom.xml
fromdeps.edn
by runningclj -Spom
. Then runmvn 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
而后我在想 pom.xml
是 XML 维护起来太麻烦了, 能不能用脚本处理一下,
想起来后面的回复当中有人写了 meyvn 这个工具.
是一个 Maven 的封装的样子. 忽然以为可能就是作这个事情的.
Meyvn 依赖 clj
命令还有 mvn
命令, 因此须要 brew 提早安装好.工具
安装步骤的话, 首先在 $HOME/.clojure/deps.edn
ui
:aliases {:meyvn {:extra-deps {org.danielsz/meyvn {:mvn/version "1.0.5"}}}}
注意版本号用最新的吧, 可能之后版本安装方式会简化一下.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, 用到其余配置我还得想一想.