Java-Quellcode aus einer Zeichenfolge kompilieren? [Duplikat]

8

Gibt es eine Möglichkeit für ein laufendes Java-Programm, Java-Quellcode zu kompilieren (als String übergeben)?

%Vor%

Idealerweise werden alle Klassen, auf die der übergebene Quellcode verweist, vom Klassenlader des Programms aufgelöst.

Gibt es so etwas?

    
Tony the Pony 16.12.2010, 17:09
quelle

5 Antworten

9

Sicher. Werfen Sie einen Blick auf die JavaCompiler Klasse und die anderen Klassen in das Paket javax.tools .

Sie sind seit Java 1.6 da.

Hier ist ein Beispielcode.

(Wie @Sergey Tachenov in den Kommentaren darauf hingewiesen hat, muss JDK als erforderliche tools.jar-Datei installiert sein, es kommt jedoch mit JDK, nicht mit JRE.)

    
aioobe 16.12.2010, 17:13
quelle
4

Was Sie brauchen, ist eine Klasse, die JavaFileObject

erweitert %Vor%

Welches kann wie folgt verwendet werden:

%Vor%     
MonoThreaded 08.07.2013 12:11
quelle
3

Hängt davon ab, was Sie tun möchten. Wenn Sie nur etwas Code ausführen möchten, können Sie BeanShell verwenden. Es ist keine Java-kompilierte Klasse, aber es ist sehr nützlich, etwas flexibel zu machen

    
Plínio Pantaleão 16.12.2010 17:17
quelle
1

Du könntest meine essence jcf-Bibliothek ausprobieren, die das tut. Wenn Sie im Debug-Modus arbeiten, können Sie die Quelle in eine Datei schreiben lassen, so dass Sie in den Code einsteigen können. Ansonsten macht es alles im Speicher. Es umschließt den JavaCompiler in tools.jar

Er nimmt einen String, kompiliert und lädt ihn in den aktuellen Klassenlader und gibt die Klasse zurück. Es behandelt geschachtelte / innere Klassen.

Ссылка

Hinweis: Ich habe das nicht in OSGi funktioniert. ;)

    
Peter Lawrey 16.12.2010 17:21
quelle
1

Javassist kann zur Laufzeit Klassen und Methoden aus Strings des Quellcodes erzeugen und laden. Es ist auch möglich, die generierte Klasse bei Bedarf im Dateisystem abzulegen.

Gegenwärtig gibt es geringfügige Einschränkungen in dem Code, den Sie in diesen Zeichenfolgen übergeben können, z. B. Generics, Enumerationen oder Autoboxing und Posteingang von Primitiven können nicht enthalten sein. Mehr Informationen hier:

Ссылка

    
Sergio 20.09.2012 11:47
quelle

Tags und Links