Bisher habe ich
%Vor% Dies startet den Compiler manuell, aber ich möchte den resultierenden String aus dem ersten Compiler ( MyProjectCompiler
, der Kotlin-Quelle generiert) im Arbeitsspeicher kompilieren und das Ergebnis überprüfen, ohne in eine Datei zu schreiben.
Ich möchte wenn möglich alles in den aktuellen Klassenpfad aufnehmen.
Ich fand den einfachsten Weg, etwas wie den Code in der ursprünglichen Frage zu verwenden und java.io.tmpdir
zu verwenden. Hier ist eine wiederverwendbare Lösung:
Fügen Sie den Kotlin-Compiler als Testabhängigkeit hinzu:
%Vor%Wrapper für den Compiler:
%Vor%Classloader zum Erstellen von Objekten aus den kompilierten Klassen:
%Vor%Beispiel für einen Testfall:
Erstellen Sie zuerst eine Kotlin-Quelldatei
%Vor%Stellen Sie sicher, dass es kompiliert:
%Vor%Laden Sie die Klasse als Schnittstelleninstanz
%Vor% Die Ausgabe ist wie erwartet: found: 'Hello, world!'
Wenn Sie die Quelle der Klasse K2JVMCompiler
lesen, scheint der Compiler nur die Kompilierung für Dateien zu unterstützen. Bei genauerem Hinsehen erscheint es zu kompliziert, die Einträge von org.jetbrains.kotlin.codegen.KotlinCodegenFacade
static method compileCorrectFiles
zu fälschen.
Sie können davon ausgehen, dass Sie dafür ein Dateisystem verwenden. Eine temporäre RAM-Disk kann Ihren Anforderungen entsprechen. (Dies ist zum Beispiel eingebautes MacOS )