Java/GroovyでClojureスクリプトコードを含むString
をコンパイルしようとしています。私は"java -jar ...".execute()
を使って本当に満足していません。JavaアプリケーションでClojureScriptをコンパイル
コードをコンパイルするためにclojurescriptライブラリ(バージョン1.8.51)を呼び出す方法はありますか?
編集:/:私の問題は、そのEMIT関数の戻り値は空の文字列である
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"
)
)
: は、だから私は、このコード(Groovyの)を持ってこれらの2つのリンクを組み合わせます。私が間違っていることは何ですか?
EDIT2:分析方法がこれを返す:
{
: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
}
更新をご覧になれますか? – MAGx2
私はあなたが今解決している新しい問題として聞こえるので、別の質問として投稿するべきだと思います。あなたのコードの問題は、Stringを 'analyze.invoke'に渡しているのに対し、コードを表すClojureデータ構造でなければなりません。したがって、普通の文字列を渡す代わりに、呼び出しの結果を 'Clojure.read(inputText)'に渡してください。 –
私はClojure.readを追加して引用符を削除しました。すべて動作します。ありがとう! – MAGx2