虽然我对Clojure和React都不是很了解。这不影响我对Lisp的真爱,更不会影响我本地编译Metabase。
我用的是windows操作系统。
让我来总结一下我的编译过程吧。
-
下载Metabase源码
-
前端环境
-
后端环境
-
开始动手编译
下载Metabase源码
git clone https://github.com/metabase/metabase.git
docs/developers-guide.md中有写编译的步骤,可以参考
前端环境
安装node
https://nodejs.org/zh-cn/
安装yarn
https://yarn.bootcss.com/docs/install/#windows-stable
后端环境
安装maven
这是java的包管理工具
安装leiningen
这个是Clojure的包管理器,由于网络的问题安装时花了我好多时间。
官网https://leiningen.org/下载lein script.
然后在电脑上的Git bash,cd到metabase源码目录下,把lein script的目录添加到path中,假设lein scripts的目录是d:/tools
set path = d:/tools:$PATH
然后执行
lein self_install
由于网络的原因,我装了得有半个小时吧,其实它就是去github上下载了一个jar文件,同时做了一些设置。这个jar文件就是leiningen-2.9.3-standalone.jar。在这里https://github.com/technomancy/leiningen/releases。下载到了C:\Users\你的用户名.lein\self-installs目录下
开始动手编译
还是在之前的bash git中,执行
./bin/build
报错了错误时
$ ./bin/build translations
Running 'yarn' to download javascript dependencies...
yarn install v1.17.3
$ echo $npm_execpath | grep -q yarn || echo '\033[0;33mSorry, npm is not support
ed. Please use Yarn (https://yarnpkg.com/).\033[0m'
'\033[0;33mSorry, npm is not supported. Please use Yarn (https://yarnpkg.com/).\
033[0m'
[1/5] Validating package.json...
[2/5] Resolving packages...
success Already up-to-date.
Done in 0.99s.
Running './bin/i18n/build-translation-resources' to build translation resources...
Compiling locales/ca.po for frontend...
+ Warning: removed 1 fuzzy translations
msgfmt: Java compiler not found, try installing gcj or set $JAVAC
msgfmt: compilation of Java class failed, please try --verbose or set $JAVAC
Building translation resources failed, please install 'gettext', or build without translations by running './bin/build no-translations'.
大意是找不到java的编译器,但是javac命令是可以找到的,我就不知道为什么,难道是让我设置$JAVAC=javac,我没试,直接用了./bin/build no-translations
下面就是漫长的等待时间了,既要下载需要的clojure包也要下载npm包,鬼知道我折腾了多久。网络环境阻碍了中国的技术进步呀:(
由于这个过程是我编译成功后再总结的,可能丢失了一些细节,我已经回忆不上来了。还要补充一下,我机器上安装了Clojure的REPL,我不知道如果没有这个东西能不能编译成功(我猜大概率可以成功的,但是我没有功夫卸载之后再编译)。我电脑很久以前也安装了jdk,版本是
java 12.0.2 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
如果老天保佑的话,你也会成功的,那么在target\uberjar目录下就会有metabase.jar,执行试试吧java -jar metabase.jar
真是太难了,java -jar metabase.jar运行成功了,但是在浏览器中输入localhost:3000确实白页面,浏览器中报错
我只关注了这条错误,其实始作俑者是第一条报错。浏览器限制了inline script的执行,而index.html页面中有几段inline的脚本。我实在搞不清楚为什么hash值不一致,只能把这个限制干掉了,在metabase\src\metabase\middleware\security.clj中加入了"‘unsafe-inline’",从新打包./bin/build uberjar
还要提一下,不知道是我电脑的原因,还是代码量太大,编译一次要很长时间,十分钟起步吧。我对Java和Clojure不熟,不知道真正开发时是不是也是这样的,如果这样那不是痛苦死了。后面慢慢了解吧
截个图庆祝一下吧
如果有帮助,请点赞哦:)