尝试编译简单项目时,OS X上的ClojureScript编译器NullPointerException

时间:2016-12-09 04:27:51

标签: clojure clojurescript

我尝试按照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?它是编译器错误吗?

0 个答案:

没有答案