Gibt es so etwas wie den interaktiven REPL-Modus von Python, aber für Java?


92

Gibt es so etwas wie den interaktiven REPL-Modus von Python, aber für Java? Damit ich zum Beispiel InetAddress.getAllByName( localHostName )ein Fenster eingeben und sofort Ergebnisse erhalten kann, ohne all diese öffentliche statische Leere Alptraum () Sache?



Antworten:


64

bearbeiten Seit Java 9 gibt es JShell

Die ursprüngliche Antwort folgt

Sie können auch Groovy Console verwenden . Es ist eine interaktive Konsole, in der Sie tun können, was Sie wollen. Da Groovy auch Klassen von der Java-Kernplattform enthält, können Sie diese Klassen auch verwenden.

Es sieht aus wie das:

Screenshot von Groovy


Der Screenshot ist im Imageshack nicht mehr vorhanden.

Das Schöne an der groovigen Konsole ist, dass standardmäßig viel mehr Pakete importiert werden (z. B. java.util. *), Sodass Sie nicht so viele Importanweisungen schreiben müssen
Dónal

2
Für diejenigen, die zu faul sind, um Groovy zu installieren, gibt es hier eine Online-Version dieser Konsole: groovyconsole.appspot.com . Einige JDK-Bibliotheken sind nicht verfügbar (z. B. E / A und System.exit()), aber für die meisten Zwecke sollte dies angemessen sein.
Dónal

Dies akzeptiert keine Klassen ist das normal? class test{public static void test(){System.out.println('test')}}
Kalk

52

Eclipse hat eine Funktion, um dies zu tun, obwohl es keine Schleife ist. Es heißt "Scrapbook Page". Ich nehme an, die Analogie soll sein, dass Sie ein Sammelalbum haben, in dem Sie kleine Codeausschnitte sammeln.

Um es zum Laufen zu bringen, öffnen Sie ein Projekt in Eclipse (Ihre Scrapbook-Seite wird einem Projekt zugeordnet - Eclipse gefällt es, wenn Projekte Dinge besitzen).

Dann:

  1. Wählen Sie im Projektnavigatorfenster einen Ordner aus, der irgendwo in Ihrem Projekt vorhanden ist.
  2. Wählen Sie entweder das Menü Datei -> Neu -> Andere oder drücken Sie Strg-N.
  3. Wählen Sie Java -> Java Run / Debug -> Scrapbook Page.
  4. Klicken Sie auf "Weiter", geben Sie einen Dateinamen ein und klicken Sie dann auf "Fertig stellen".

Jetzt haben Sie eine Sammelalbumseite. Geben Sie einen Code ein, wie folgt:

System.out.println(System.getProperties());

Wählen Sie dann den Text mit der Maus aus und drücken Sie entweder Strg-U oder wählen Sie "Ausführen" aus dem Kontextmenü. Der Code wird ausgeführt und die Ausgabe wird auf der Konsole angezeigt.

Sie können auch einen Ausdruck eingeben, auswählen und im Kontextmenü die Option Anzeigen auswählen. Der Ausdruck wird ausgewertet und sein Typ gedruckt. Wenn Sie beispielsweise Anzeige ein ausführen, 1 + 2wird gedruckt (int) 3.


1
Dank dafür. Beanshell hatte für mich eine Zeitüberschreitung, aber das funktioniert perfekt.
Bayard Randel

3
Ich benutze Eclipse schon so lange, wusste aber nichts davon, danke!
Tobold

28

BeanShell ist ein kleiner, kostenloser, einbettbarer Java-Quellinterpreter mit in Java geschriebenen Funktionen für die Skriptsprache von Objekten. BeanShell führt die Standard-Java-Syntax dynamisch aus und erweitert sie um allgemeine Skriptfunktionen wie lose Typen, Befehle und Methodenabschlüsse wie in Perl und JavaScript. Sie können BeanShell interaktiv zum Experimentieren und Debuggen von Java sowie zum Erweitern Ihrer Anwendungen auf neue Weise verwenden. Skripterstellung Java eignet sich für eine Vielzahl von Anwendungen, einschließlich Rapid Prototyping, Benutzer-Skripterweiterung, Regel-Engines, Konfiguration, Test, dynamischer Bereitstellung, eingebetteten Systemen und sogar Java-Schulungen.

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax


Es gibt auch interaktive Jython- und JRuby-Shells für weniger ausführliche Syntaxen.
Bakkal

1
BeanShell wird aktiv als Beanshell 2 gepflegt - code.google.com/p/beanshell2
hshib

Ein einfaches Beispiel für das Ausführen von Beanshell über die Befehlszeile finden Sie hier
Brad Parks

@hshib: Es ist jetzt bei Github und das letzte Commit ist von 2013. Das ist nicht "aktiv gepflegt".
Martin Schröder

@ MartinSchröder, dieser Kommentar war 2013 :-)
hshib

19

Sie können Eclipse Scrapbook-Seiten verwenden.

Erstellen Sie in Eclipse eine Sammelalbum-Seite. In Ihrem Projekt die Seite Neu-> Andere-> Sammelalbum.

Geben Sie in die Datei einen Text ein, wählen Sie ihn aus und drücken Sie Strg-U, und los geht's.

Um Ihre Importe zu verwalten, klicken Sie mit der rechten Maustaste auf die Seite und wählen Sie Importe festlegen, wo Sie ein Paket oder eine einzelne Klasse importieren können. Dies ist dauerhaft und wird mit der Seite gespeichert.


3
So nützlich es auch sein mag, eine Scrapbook-Seite ist keine dauerhafte Sitzung und funktioniert daher als REPL nicht wirklich gut.
MHarris

19

Alte Frage, aber jetzt (Mai 2013) gibt es eine bessere Antwort - java-REPL! Es ist auf Github verfügbar und auch live auf der Java-Repl-Website für schnelle einmalige Tests verfügbar .

Wenn Sie den Git-Hub-Code abrufen und ausführen ant, um die Artefakte zu generieren, können Sie die Verwendung mit einem kleinen Skript wie dem folgenden vereinfachen:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

Seit ich dieses Projekt gefunden habe, benutze ich es wahrscheinlich 5 Mal am Tag. Genießen!


Der Link für die Online-Antwort scheint jetzt javarepl.com/term.html zu sein . Der alte Link zeigt nur Java-Fehler an.
Tony

13

Es scheint, dass noch niemand erwähnt hat, dass Java (6, 7) eine REPL-Konsole namens aufruft jrunscript. Es ist sprachunabhängig (kann also mit Jython, JRuby usw. verwendet werden). Standardmäßig wird JavaScript (Rhino) verwendet, das ebenfalls standardmäßig gebündelt ist. Wie in den anderen Sprachen können Sie auf alle im Klassenpfad verfügbaren Pakete / Objekte zugreifen.




11

Jython ist eine Python-Implementierung, mit der Sie Java-Objekte untersuchen und mit ihnen interagieren können.

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])



7

Die groovige Konsole ermöglicht es Ihnen, dies zu tun. Eigentlich sollte es versuchen, groovigen Code zu testen, aber da groovy eine Obermenge von Java ist, erlaubt es auch einfaches Java-Zeug.

Ich habe dies gerade in die Konsole eingegeben:

InetAddress.getAllByName('localhost')

und drücken Sie STRG-R, dann kehrte es zurück:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

Scala bietet auch eine interaktive Konsole. Ich konnte es verwenden, um ein Ergebnis für den Ausdruck in Ihrer Frage zu erhalten, indem ich InetAddress vollständig qualifizierte, wie in:

java.net.InetAddress.getAllByName("localhost")

6

Während JRuby , BeanShell und Julian Fleischers REPL dort sind, gibt es Albert Lataczs REPL scheint die neueste und aktivste zu sein.

Versuchte es mit einer einfachen Klassendefinition, funktioniert gut.

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);

3

Für Benutzer mit Zugriff auf Mathematica können Sie mit JLink auf Java und Skripte mit Mathematica-Code zugreifen:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

Drücken Sie die Umschalt-Eingabetaste, um zu bewerten, und Sie erhalten

{<<JavaObject[java.net.Inet4Address>>}

Anschließend können Sie die Map-Funktion von Mathematica verwenden, um toStringdie zurückgegebenen Objekte aufzurufen :

#@toString[]& /@ %

um das Ergebnis zu erhalten (oder um die weniger obskure Syntax zu verwenden Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Wenn Sie ernsthaft damit anfangen, sollten Sie das Tutorial von Todd Gayley unter http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html lesen .


2

Wenn Sie Groovy bereits kennen (was Sie vermutlich tun, da Sie die Groovy-Konsole erwähnt haben), verwenden Sie einfach groovysh oder groovyConsole, die in der Groovy-Distribution enthalten sind. Wenn Sie benutzerdefinierte Jars haben, die Sie importieren möchten, können Sie entweder eine Batch-Datei schreiben, die groovysh / groovyConsole mit den dem Klassenpfad hinzugefügten startet. Sie können dies auch tun

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

aus der Schale heraus, um andere Gläser zu laden.

Ich habe Jython vor einigen Jahren verwendet, um genau das zu tun, was Sie verlangen. Als Teil meines Build-Skripts habe ich eine benutzerdefinierte Datei jython.bat und .py generiert, die den vollständigen Klassenpfad für das Projekt enthält, an dem ich gearbeitet habe. Auf diese Weise würde beim Starten von Jython der gesamte Code verfügbar sein und Spring aufrufen, damit ich die Dinge im Live-System ändern kann. Sie können dasselbe mit Groovy, JRuby, BeanShell usw. tun.


Ich weiß, dass ich die Groovy-Shell verwenden könnte, aber Groovy hat nicht genau die gleiche Semantik wie Java und keine Typprüfung. Es ist also möglich, dass ich Kompilierungsfehler oder ein anderes Laufzeitverhalten mit einem Teil des Java-Codes bekomme, der in der Groovy-Shell zu funktionieren schien.
Dónal

groovy lädt auch alle lib in ~ / .groovy / lib, Sie könnten entweder Sachen dort kopieren oder Symlinks verwenden
Jason



1

Die meisten IDEs haben ein Fenster namens "Sofortmodus", in dem Sie Java-Code im laufenden Betrieb auswerten können.


Eclipse hat eine "Anzeigeansicht", die nahe an dem liegt, was ich will. Das Problem ist, dass es im Kontext der laufenden Anwendung sein muss. Ich muss eine App ausführen, am Haltepunkt anhalten und erst dann kann ich eingeben, was ich will.
Yoni Roit

@YoniRoit IMHO Ich mag "Anzeige" + Debug-Modus besser als eine Befehlszeile REPL. Ich habe vor langer Zeit REPL mit Python verwendet, also habe ich beides getan. Ich denke, es ist weitaus besser, einen Unit-Test zu schreiben, einen Haltepunkt zu setzen und mit dem gewünschten Kontext zu spielen, während der Code, der funktioniert, wieder in den Unit-Test eingefügt wird. Es ist viel schwieriger, einen genauen Kontext in einer einfachen REPL zu erhalten, als einen Unit-Test zu sagen.
Adam Gent

1

Sie könnten sich BlueJ ansehen eine interaktive Java-Entwicklungsumgebung, die eher zum Unterrichten von OOP als als vollständige IDE wie Eclipse oder NetBeans gedacht ist. Es macht sowieso Spaß, mit ihm zu spielen.

Sie können es in YouTube in einer Reihe von Java-Tutorials in Aktion sehen .


das ist interessant. Bluej ist wie ein Op Repl. Nicht wirklich nützlich für die Dinge, für die Sie derzeit eine Replikation verwenden, aber Sie können sie verwenden, um Ihr oo-Design zu prototypisieren, wie Sie eine Replikation verwenden würden, um eine Methode zu prototypisieren.
Bill K

1

DrJava ist eine Lern- IDE, die einen REPL-Bereich enthält.

Es gibt auch ein Eclipse-Plugin, aber es hat bei mir nicht funktioniert. Ich denke, es wurde seit einiger Zeit nicht mehr aktualisiert. Im Allgemeinen halte ich ein DrJava-Fenster für die Fragen "Was passiert, wenn ich das tue?" Offen.

EclipseShell ist vielleicht auch gut, aber ich habe es noch nicht verwendet.



1

Es gibt eine einfache IDE namens DrJava mit einer Interaktionskonsole. Es funktioniert genau so, wie ich es erwarten würde. Laden Sie einfach eine Datei und beginnen Sie mit den darin enthaltenen Objekten zu interagieren.




1

JPad ist ein Java-Notizblock mit einer integrierten REPL:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

Es ist auch klug, Sammlungen, Listen, Karten usw. zu sichern und sie als Tabelle oder Diagramm zu rendern:

Geben Sie hier die Bildbeschreibung ein


1

Java 9 stellt die JShell bereit.

jshell> println( "Print me!")
jshell> Print me!

0

Jython, JIRB für JRuby , Groovy (groovyconsole et al.) Und Beanshell sind alles mögliche Optionen.

Ich habe das InteractiveConsolefür Jython verwendet, es hat in der App wirklich gut funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.