2016-06-23 14 views
7

Java 9 führt REPL JShell innerhalb der JDK-Distribution. Gibt es eine Möglichkeit, eine Verbindung zur JShell des JDK herzustellen, die eine Anwendung ausführt und Befehle ausführt, die auf diese laufende App verweisen? Zum Beispiel die Ausführung einiger Methoden bilden den App-Code, Objekte zu überprüfen, etc ..?Java 9 REPL für laufende App

+0

Ist das in anderen REPLs möglich? –

+2

Nein, das ist nicht das Ziel von JShell. Das Ziel ist, dass Sie Java-Anweisungen in einem schnellen Manöver auswerten können. JShell stellt einen umgebenden Kontext zur Verfügung, mit dem Sie Zeit sparen können. Sie können ihm nicht sagen, dass er eine Anwendung als umgebenden Kontext verwenden soll. –

+1

@bigdestroyer gibt es Absturz Shell, die einige von dem, was ich erwähnt habe http://www.crashub.org/ –

Antwort

4

JShell ist nicht der Standard-Java-Befehl, es ist ein anderer Befehl. Sobald Sie die Shell öffnen, "geht" es in Read Eval Print Loop. Sobald Sie einen Befehl eingegeben haben, wird er von der Shell gelesen und analysiert, ausgewertet und das Ergebnis wird gedruckt.

Sie können Variablen definieren und Klassen zum Klassenpfad hinzufügen, aber ich glaube nicht, dass es möglich ist, von dort aus eine Anwendung oder einen Server zu starten, zumindest nicht in diesem Stadium und nicht in derselben JVM. Da Sie Klassen hinzufügen können, können Sie sie instanziieren, aber Sie haben keine Möglichkeit, ihre Variablen zu überprüfen. Sie können jedoch die Variablen sehen, die Sie in Ihrem JShell-Bereich instanziieren (welche Objekte Sie erstellt haben, Sie können nur auf ihre öffentlichen Methoden und Variablen zugreifen und diese drucken).

Es scheint, dass JShell eine API hat, die den Weg für andere Möglichkeiten öffnet.

1

Nein, nicht leicht mit Jshell.

aber lassen Sie mich Ihre Frage umformulieren, damit wir verwenden jshell nicht, aber was auch immer REPL Java-Tool:

Gibt es eine Möglichkeit, etwas REPL Java-Tool mit einer laufenden Java-Anwendung zu verbinden und Ausführen von Befehlen, die ausgeführt Referenzierung App Zum Beispiel die Ausführung einiger Methoden bilden den App-Code, Objekte zu überprüfen, etc ..?

https://github.com/lorenzoongithub/nudge4j

dann sollten Sie einen Blick auf nudge4j nehmen es genau das

die einzige Einschränkung ist für Java 8.

0

Die Alternative, die Sie berücksichtigen nicht erlaubt könnte, ist so etwas wie BeanShell (Obwohl BeanShell ziemlich alt ist und wahrscheinlich veraltet ist). Sie können eine BeanShell-Konsole innerhalb Ihrer Anwendung starten, mit der Sie auf Ihre Objekte zugreifen und Methoden für sie aufrufen können. Beispiele für einige Ideen finden Sie unter JConsole.