2016-04-26 16 views
1

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 
} 

答えて

1

たとえばas presented in answers to a similar question on how to do it from Clojureため、ClojureのからClojureScriptコンパイラAPIを呼び出すことは非常に簡単なはずです。

しかし、JavaやGroovyからやりたければ、Clojure Java API for calling Clojure from Javaを使用する必要があります。

+0

更新をご覧になれますか? – MAGx2

+1

私はあなたが今解決している新しい問題として聞こえるので、別の質問として投稿するべきだと思います。あなたのコードの問題は、Stringを 'analyze.invoke'に渡しているのに対し、コードを表すClojureデータ構造でなければなりません。したがって、普通の文字列を渡す代わりに、呼び出しの結果を 'Clojure.read(inputText)'に渡してください。 –

+0

私はClojure.readを追加して引用符を削除しました。すべて動作します。ありがとう! – MAGx2

関連する問題