Ich versuche, String
kompilieren, die Clojure Script-Code in Java/Groovy enthält. Ich bin nicht wirklich glücklich mit "java -jar ...".execute()
.Kompilieren Sie ClojureScript in der Java-Anwendung
Gibt es eine Möglichkeit, die Clojurescript-Bibliothek (Version 1.8.51) aufzurufen, um Code zu kompilieren?
Edit: So die Kombination dieser beiden Links, die ich diesen Code bekam (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"
)
)
Mein Problem ist, dass Funktion Rückgabe leerer String emittieren: /. Gibt es irgendetwas, was ich falsch mache?
Edit2: Die Methode analysieren Rückkehr dies:
{
: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
}
Können Sie sich das Update ansehen? – MAGx2
Ich denke, du solltest es als eine andere Frage posten, da es sich wie ein neues Problem anhört, das du jetzt löst. Das Problem in Ihrem Code ist, dass Sie einen String an 'analyze.invoke' übergeben, während es eine Clojure-Datenstruktur sein sollte, die den Code darstellt. Anstatt die einfache Zeichenfolge zu übergeben, übergeben Sie das Ergebnis des Aufrufs an 'Clojure.read (inputText)'. –
Ich habe Clojure.read hinzugefügt und Zitat entfernt - alles funktioniert. Vielen Dank! – MAGx2