我尝试按照ClojureScript快速入门指南http://clojurescript.org/guides/quick-start尝试在OS X上手动调用clojurescript编译器。
我有java 1.8.0_92
% javac -version
javac 1.8.0_92
我创建了一个新目录(为了完整性〜/ tmp / clojure / cljstest /)。所有路径都与此目录相关。我想我正在使用clojurescript的1.9.293版本。
% cat $(which cljsc)
#!/bin/bash
exec java -jar /usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar "$@"
cljsc
jar本身可以正常工作。
% cljsc
Clojure 1.8.0
user=>
我还下载了教程中提到的独立cljs.jar并检查了md5sum以确保它们相同。
% wget https://github.com/clojure/clojurescript/releases/download/r1.9.293/cljs.jar
% md5 cljs.jar
MD5 (cljs.jar) = 658d7b722cebe46e36604baf9eecfcb5
% md5 /usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar
MD5 (/usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar) = 658d7b722cebe46e36604baf9eecfcb5
我跑了
% mkdir -p src/hello_world
然后
% touch ./src/hello_world/core.cljs
./src/hello_world/core.cljs的内容是:
(ns hello-world.core)
(enable-console-print!)
(println "Hello World!")
./build.clj的内容是:
(require 'cljs.build.api)
(cljs.build.api/build "src" {:output-to "out/main.js"})
我通过自制软件下载了clojure
% where cljsc
/usr/local/bin/cljsc
这是我用来定位.jar
的shell脚本% cat $(which cljsc)
#!/bin/bash
exec java -jar /usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar "$@"
我尝试使用教程
中给出的显式类路径运行编译器% java -cp /usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar:src clojure.main build.clj
这产生了以下堆栈跟踪:
% java -cp /usr/local/Cellar/clojurescript/1.9.293/libexec/cljs.jar:src clojure.main build.clj
Exception in thread "main" java.lang.NullPointerException, compiling:(/Users/gregnisbet/tmp/clojure/cljstest/build.clj:3:1)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$script_opt.invokeStatic(main.clj:335)
at clojure.main$script_opt.invoke(main.clj:330)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
at cljs.closure$build.invokeStatic(closure.clj:1920)
at cljs.build.api$build.invokeStatic(api.clj:198)
at cljs.build.api$build.invoke(api.clj:187)
at cljs.build.api$build.invokeStatic(api.clj:190)
at cljs.build.api$build.invoke(api.clj:187)
at user$eval24.invokeStatic(build.clj:3)
at user$eval24.invoke(build.clj:3)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 11 more
我希望clojurescript编译器生成main.js
或者给我一个与clojurescript相关的错误消息。为什么ClojureScript编译器会抛出NullPointerException?它是编译器错误吗?