我试图在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
}
答案 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。