在Java应用程序中编译ClojureScript

时间:2016-04-26 20:58:08

标签: clojurescript

我试图在Java / Groovy中编译包含Clojure Script代码的String。我对使用"java -jar ...".execute()并不满意。

有没有办法调用clojurescript库(版本1.8.51)来编译代码?

编辑: 所以结合这两个链接我得到了这个代码(Groovy):

    IFn require = Clojure.var("clojure.core", "require");
    require.invoke(Clojure.read("cljs.analyzer.api"))
    require.invoke(Clojure.read("cljs.compiler.api"))

    IFn emptyEnv = Clojure.var("cljs.analyzer.api", "empty-env")
    IFn analyze = Clojure.var("cljs.analyzer.api", "analyze")
    IFn emit = Clojure.var("cljs.compiler", "emit-str")

    final inputText = "(defn plus [a b] (+ a b))"
    emit.invoke(
            analyze.invoke(emptyEnv.invoke(), "'$inputText"
            )
    )

我的问题是emit函数返回空字符串:/。我有什么不对的吗?

Edit2:analyze方法返回:

{
    :op :constant, 
    :env {:ns {:name cljs.user}, 
    :context :statement, 
    :locals {}, 
    :fn-scope [], 
    :js-globals ...removed..., 
    :form #object[org.codehaus.groovy.runtime.GStringImpl 0x37816ea6 "'(defn plus [a b] (+ a b))"], 
    :tag any
}

1 个答案:

答案 0 :(得分:1)

从Clojure调用ClojureScript编译器API应该非常容易,例如as presented in answers to a similar question on how to do it from Clojure

但是你想从Java或Groovy那里做,你必须使用一些Clojure Java API for calling Clojure from Java